【发布时间】:2012-09-24 23:31:11
【问题描述】:
我正在处理调试信息。我正在尝试编写类似于“调试信息解析器”的方式,我正在使用 DWARF 和 ELF 库来执行此操作,但是除了内存空间的信息之外,它们不提供任何东西,我正在尝试获取该内存空间中的数据.我迷上了这个程序。我正在使用一个名为 Pin 的工具,所以我实际上是在另一个程序中运行代码。这就是为什么我可以访问它的变量。
假设我有一个指向地址的指针,我想获取存储在该地址中的所有数据以及接下来的 4 个字节(例如)。
例如,假设我有一个地址 0xDEADBEEF,我想从该地址开始遍历接下来的 4 个字节并读取数据(取消引用每个字节上的指针)
我对 C 比较陌生,我想做的是:
char * address = "0xDEADBEEF";
unsigned int bytesize = 4;
ptr = (void *) address;
ptr_limit = ptr + bytesize;
for(ptr; ptr < ptr_limit; ptr++)
cout << ptr;
我知道这可能是完全错误的,而且我遇到了很多编译错误,但这只是为了展示我正在尝试使用的一些逻辑......
【问题讨论】:
-
您是否正在尝试编写调试器?
-
@therefromhere 不,但我正在处理调试信息。我正在尝试编写类似于“调试信息解析器”的方式,我正在使用 DWARF 和 ELF 库来执行此操作,但是除了内存空间的信息之外,它们不提供任何东西,我正在尝试获取该内存空间中的数据
-
C 和 C++ 是不同的语言,请告诉我们您使用的是哪一种。另外,
ptr和ptr_limit的类型是什么? -
我将 C 和 C++ 用于一个名为 Pin 的工具以及读取 ELF 和 DWARF 库。 ptr 和 ptr_limit 只是 void 指针,但我可以更改它们并使它们成为我需要的任何类型
-
一方面,
"0xDEADBEEF"不是地址,也不是数字。0xDEADBEEF是一个数字。试试看。