如何从指针到void复制结构?

时间:2014-07-15 21:00:18

标签: c++ pointers struct

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

有人能告诉我如何获取结构的详细信息?比如将结构输出到文本文件。

谢谢!

2 个答案:

答案 0 :(得分:7)

如果没有类型定义,您无法知道结构的详细信息。在没有类型定义的情况下复制以void指针开头的区域将为您提供原始二进制数据,但您不知道它的结束位置,或者哪些部分代表哪些变量。某些值可以是整数值,也可以是指针地址。有各种各样的可能性。

您应该尝试获取头文件。

可能能够从调试/符号文件中收集一些信息(例如Windows上的.pdb文件),或者在Linux上用GDB调试程序,这只会起作用如果你有一个程序的调试版本。请参阅GDB中的“whatis”和“ptype”命令。

答案 1 :(得分:0)

如果没有结构定义,你永远不会知道这一点由于对齐和填充,在实际存储器放置中的用户变量之间也可能存在“漏洞”。

说你有没有,

struct mystr {
    char x;
    int y;
};

默认情况下,这样的结构最有可能是大小为8,并且在char x的一个字节之后将有三个字节的填充(理论上是随机值),然后是4个字节的int y,但是它取决于编译器及其指令。