我想从给定的内存地址打印出东西。
使用这段代码,我可以定义一个变量,定义一个指向它的指针并使用指针打印它的内容。
char buf[100];
void *p = buf;
strcpy(p, "Test string");
printf("Address: %X\n", &buf);
printf("Contents: %c\n", p);
我想做的是指定某个内存地址,并打印出该 block 的内容。我尝试通过递增和递减 p 来进行试验,但它没有打印出任何内容。
最佳答案
一个有趣的小问题。出于好奇或厌恶,每个程序员迟早都会想到这一点。
基本上有四个部分。
- 将您想要的地址表示为适当大小的整数。
- 将整数转换为指向某种类型的指针。
- 取消引用指针以获取该类型的值。
- 打印值。
- [如果需要,递增地址并重复。]
为简单起见,我将使用 0x1000 的地址和整数内容。
int address = 0x1000;
int* pcontent = (int*)address;
int content = *pcontent;
printf ("Address %p: content %08x\n", pcontent, content);
有两点需要说明。
- 这是未定义的行为,但如果您想获得结果,这是不可避免的。
- 我选择的地址可能是有效内存,也可能触发陷阱错误,或者它几乎可以做任何事情。您必须尝试不同的地址才能找出是哪一个。
[很多年前,我使用这种策略在只有 96KB 内存的机器上打印出内存的全部内容,这导致了一些有趣的黑客攻击可能性。但我离题了。]
关于c - 定义指向内存地址的指针并打印内容 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367351/