所以,我有一个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信息。所以我确实可以访问我试图访问的虚拟内存空间
答案 0 :(得分:0)
“a”是您希望获得4个字节的地址。 “bytes”是您要存储结果的位置。我将“i”的地址分配给“a”,然后从该地址读取4个字节。
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned char bytes[4];
int i = 65535, j;
unsigned long a = (unsigned long) &i;
for (j = 0; j < 4; j++) {
bytes[j] = *((unsigned char*) a + j);
}
for (j = 0; j < 4; j++) {
printf("bytes[%d]: %d\n", j, bytes[j]);
}
}
答案 1 :(得分:0)
在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");
}
}