< 返回版块

chaoxi24 发表于 2021-05-06 16:52

这个C结构的定义是"{DWORD id, DWORD hwnd, DWORD pid, ULONG_PTR add, ULONG_PTR post, ULONG_PTR func,ULONG_PTR get,ULONG_PTR set, ULONG_PTR find, ULONG_PTR lib}",在64位上大小是72.

我在rust定义对应的结构,sizeof()大小也是72

struct dll_info {
id:u32,hwnd:u32,pid:u32,add:usize,post:usize,func:usize,get:usize,set:usize,find:usize,lib:usize
}


然后,获得C结构的地址后,将其映射到rust结构

let ms = &*(ptr as *const dll_info);

但不知道为什么,获得的数值总是错误的。

正常的数值是:

	{
		"id"	:	4,
		"hwnd"	:	530132,
		"pid"	:	6140,
		"add"	:	2607591002992,
		"post"	:	2607591000992,
		"func"	:	2607591005456,
		"get"	:	2607590999744,
		"set"	:	2607591000480,
		"find"	:	2607590999648,
		"lib"	:	2607536358160	
	}

而得到的是:

 { id: 1759774304, hwnd: 557, pid: 1720217424, add: 1995416035917827, post: 2060, func: 2394056561520, get: 2394056559520, set: 2394056563984, find: 2394056558272, lib: 2394056559008 }

请问是哪里出错了? 我尝试了所有可能,比如把所有数值格式都试过一遍,都没有得到过正确数值。

评论区

写评论
作者 chaoxi24 2021-05-06 17:03

谢谢!

--
👇
Grobycn: ``` #[repr(C)]


Grobycn 2021-05-06 16:56
#[repr(C)]
1 共 2 条评论, 1 页