如何从指向void的指针复制结构体
How to copy a struct from a pointer-to-void?
假设我有一个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个字节,但这取决于编译器和它的指令。
相关文章:
- C++指针复制重载
- 将值从指针复制到常量对象参数
- 在 C++ 中通过字符串指针复制字符串变量中的字符串
- 使用指针复制构造函数用法
- 将对象的指针复制到此对象的新指针中
- 如何将指向 int(数组)的指针复制到 int 数组?
- 从指针复制对象
- C 使用指针复制char*
- 使用随机指针C 复制列表
- 如何在C++中从void指针复制数据
- 在 C++ 中将一个指针复制到另一个指针
- 正在将指针复制到assign运算符中的另一个列表元素
- 从压缩的DIB无效指针复制
- 无法从字符指针复制到短
- C++使用指针复制构造函数
- 将对象指针复制到动态对象数组中
- 在 CUDA 中使用指针复制类
- 从指针复制派生对象
- 如何使用智能指针复制C++更改指针
- 将内容从一个指针复制到另一个指针