【发布时间】:2018-03-07 17:07:47
【问题描述】:
我正在用 C 语言编写一个 memdump 应用程序,目标是打印一个特定地址的应用程序内存的真实片段。我已经拥有的代码是这样的:
void memdump(byte_t *ptr, long size ) {
...
typedef unsigned char byte_t;
byte_t data[size];
//&data[0] = &ptr;
byte_t * pointer_to_byte = data;
for (size_t j = 0; j < size; j+=10) {
printf("%p ",&data[j]);
for (size_t i = j; i < j+10; i++) {
printf("%02x ",*(pointer_to_byte+i));
}
for (size_t i = j; i < j+10; i++) {
if (isprint(*(pointer_to_byte+i))) {
printf("%c",*(pointer_to_byte+i));
} else {
printf("." );
}
}
printf("\n" );
}
}
main.c:
void *start_addr;
...
scanf("%p", &start_addr);
...
memdump( (byte_t*)start_addr, size );
您可以看到我使用数组来获取内存块,但这可能不是最好的方法。现在我想获取地址作为扫描参数,我的问题是获取此地址的最佳数据类型是什么,以及如何更改代码以便使用特定地址?我已经使用指针来打印数据和字符,所以我认为指针是最好的方式。
【问题讨论】:
-
[help-me]请写一个 MCVE。你如何声明ptr?提示:&data[0] = &ptr;没有做你希望做的事情。 -
不,我已经发现 &data[0] = &ptr;不是这样。是的,我是一种混乱的人,我会编辑这个问题。
-
data的意义何在?删除它,看看它会把你带到哪里。