任何人都可以提供一个C代码来显示从0到结束的内存位置的所有值吗?
答案 0 :(得分:6)
假设您所在的系统没有受保护的内存访问,和/或没有MMU,因此使用的地址是真实的物理地址,这非常简单。
#include <stdio.h>
#include <stdlib.h>
/* Print memory contents from <start>, 16 bytes per line. */
static void print_memory(const void *start, size_t len)
{
const unsigned char *ptr = start;
int count = 0;
printf("%p: ", ptr);
for(; len > 0; --len)
{
printf("%02X ", *ptr++);
if(++count >= 16)
{
printf("\n%p: ", ptr);
count = 0;
}
}
if(count > 0)
putchar('\n');
}
int main(void)
{
print_memory(NULL, 1024);
return EXIT_SUCCESS;
}
这应该完全正常一个旧的Amiga,但在运行Linux,Windows或其他任何东西的现代PC上几乎没用。
答案 1 :(得分:2)
您将无法执行此操作,因为取消引用零位置将在除HP-UX之外的所有Unix系统上引发SEGV信号,其中它依赖于编译器开关或运行时属性,零位置是否可以被解除引用。
答案 2 :(得分:2)
问题有点模糊。
您要么显示由于映射和交换而无法工作的整个内存(至少不容易)。
或者您想显示一块已分配的内存。这很容易。您可以创建指向内存的指针并显示所有相关字节。或者,如果您知道布局,则可以创建结构。无论哪种方式,您都需要知道结束的位置。通过了解大小或分隔字符。