如何从指向void的指针复制结构体

How to copy a struct from a pointer-to-void?

本文关键字:指针 复制 结构体 void      更新时间:2023-10-16

假设我有一个DLL包含一个结构体,但我不知道这个结构体的细节。但是我有一个指向结构体地址的void指针。

谁能告诉我怎样才能得到结构体的细节?例如将结构体输出到文本文件。

谢谢!

如果没有类型定义,就无法了解结构体的详细信息。在没有类型定义的情况下,复制一个以void指针开始的区域会给你原始的二进制数据,但你不知道它在哪里结束,也不知道哪个部分代表哪个变量。其中一些值可以是整数值,也可以是指针地址。有各种各样的可能性。

你应该尝试获取头文件。

可能能够从debug/symbol文件中收集一些信息,如果您有它(例如Windows上的.pdb文件),或者在Linux上使用GDB调试程序,这只会在您有程序的调试构建时才有效。参考GDB中的"whatis"answers"ptype"命令

如果没有结构定义,您永远不会知道这一点。此外,由于对齐和填充,在实际内存位置中的用户变量之间可能存在"漏洞"。

说如果你有,

struct mystr {
    char x;
    int y;
};
默认情况下,

这种结构的大小很可能是8,在char x的一个字节之后会有三个字节的填充(理论上是随机值),然后是int y的4个字节,但这取决于编译器和它的指令。