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

and*_*opa 0 c pointers

我想从给定的内存地址中打印出内容。

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

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

strcpy(p, "Test string");

printf("Address: %X\n", &buf);
printf("Contents: %c\n", p);
Run Code Online (Sandbox Code Playgroud)

我要做的是指定一个特定的内存地址,并打印出该块的内容。我尝试通过递增和递减p进行实验,但它不会输出任何内容。

dav*_*pfx 5

一个有趣的小问题。无论出于好奇还是出于好奇,每个程序员迟早都应该想到的一种情况。

本质上分为四个部分。

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

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

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

应该提出两点。

  1. 这是不确定的行为,但如果要获得结果,这是不可避免的。
  2. 我选择的地址可能是有效的内存,也可能触发陷阱错误,或者几乎可以执行任何操作。您必须尝试使用​​不同的地址来找出哪个。

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