c - 定义指向内存地址的指针并打印内容 C++

标签 c pointers

我想从给定的内存地址打印出东西。

使用这段代码,我可以定义一个变量,定义一个指向它的指针并使用指针打印它的内容。

char buf[100];
void *p = buf;

strcpy(p, "Test string");

printf("Address: %X\n", &buf);
printf("Contents: %c\n", p);

我想做的是指定某个内存地址,并打印出该 block 的内容。我尝试通过递增和递减 p 来进行试验,但它没有打印出任何内容。

最佳答案

一个有趣的小问题。出于好奇或厌恶,每个程序员迟早都会想到这一点。

基本上有四个部分。

  1. 将您想要的地址表示为适当大小的整数。
  2. 将整数转换为指向某种类型的指针。
  3. 取消引用指针以获取该类型的值。
  4. 打印值。
  5. [如果需要,递增地址并重复。]

为简单起见,我将使用 0x1000 的地址和整数内容。

int address = 0x1000;
int* pcontent = (int*)address;
int content = *pcontent;
printf ("Address %p: content %08x\n", pcontent, content);

有两点需要说明。

  1. 这是未定义的行为,但如果您想获得结果,这是不可避免的。
  2. 我选择的地址可能是有效内存,也可能触发陷阱错误,或者它几乎可以做任何事情。您必须尝试不同的地址才能找出是哪一个。

[很多年前,我使用这种策略在只有 96KB 内存的机器上打印出内存的全部内容,这导致了一些有趣的黑客攻击可能性。但我离题了。]

关于c - 定义指向内存地址的指针并打印内容 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367351/

相关文章:

c - 将数组传递给函数形参

更改文件

解析章节时的 Coredump

c - 输出是 5 5 6 7 8 9 怎么解释?

c - LinkedList 头节点不断被覆盖 C

delphi - 读取任意内存位置?可能的?

c - 将结构体数组作为指针传递

c - 如何传入整数指针数组

c - 在C中获取具有动态长度的字符串的一部分

c - 我传递了一个指向该函数的指针,但没有任何内容写入其地址