假设我有一个包含结构的DLL,但我不知道这个结构的细节。但是我有一个指向结构地址的void指针。
有人能告诉我如何获取结构的详细信息?比如将结构输出到文本文件。
谢谢!
答案 0 :(得分:7)
如果没有类型定义,您无法知道结构的详细信息。在没有类型定义的情况下复制以void指针开头的区域将为您提供原始二进制数据,但您不知道它的结束位置,或者哪些部分代表哪些变量。某些值可以是整数值,也可以是指针地址。有各种各样的可能性。
您应该尝试获取头文件。
你可能能够从调试/符号文件中收集一些信息(例如Windows上的.pdb文件),或者在Linux上用GDB调试程序,这只会起作用如果你有一个程序的调试版本。请参阅GDB中的“whatis”和“ptype”命令。
答案 1 :(得分:0)
如果没有结构定义,你永远不会知道这一点由于对齐和填充,在实际存储器放置中的用户变量之间也可能存在“漏洞”。
说你有没有,
struct mystr {
char x;
int y;
};
默认情况下,这样的结构最有可能是大小为8,并且在char x
的一个字节之后将有三个字节的填充(理论上是随机值),然后是4个字节的int y
,但是它取决于编译器及其指令。