所以,我有一个unsigned int
变量,上面存储着一个十进制值地址,比如说unsigned int var = 1232342
,我想做的是在不知道变量的类型的情况下,但是知道变量的大小和存储它的地址,以byte array
的形式获取值。例如,假设我有一个int var = 20
及其地址和字节大小。我希望能够转到该地址并返回一个字节数组,在这种情况下,[00001100]
与char
变量和结构的数据成员相同。
一点伪代码将类似于:
for var.address until var.address = var.address + bytesize
do
byte_array = *var.address
var.address++
我遇到了一些问题,但是我对C有点陌生,所以我不知道如何将unsigned int视为地址/指针。其次,每当我取消引用该地址时,我都不知道如何从该地址中获取实际的字节,但这是我知道变量的类型的情况。
背景:我正在使用一个名为Pin的工具,该工具使我可以选择挂接到正在运行的进程,然后使用DWARF和ELF信息。所以我确实有权访问我要访问的虚拟内存空间
最佳答案
在这里看看epatel的hexdump
函数
Off-the-Shelf C++ Hex Dump Code
尽管有标题,但实际上是C代码。为了方便起见,我会在这里复制
#include <ctype.h>
#include <stdio.h>
void hexdump(void *ptr, int buflen) {
unsigned char *buf = (unsigned char*)ptr;
int i, j;
for (i=0; i<buflen; i+=16) {
printf("%06x: ", i);
for (j=0; j<16; j++)
if (i+j < buflen)
printf("%02x ", buf[i+j]);
else
printf(" ");
printf(" ");
for (j=0; j<16; j++)
if (i+j < buflen)
printf("%c", isprint(buf[i+j]) ? buf[i+j] : '.');
printf("\n");
}
}