在C中取消引用任意内存位置

Tyl*_*ler 8 c memory pointers dereference

我正在尝试调试我编写的程序.根据调试器,特定void *值保持值0x804b008.我希望能够取消引用这个值(将其转换为a int *并获得它的值).

我用这段代码得到了分段错误.(该程序void *仍然在后台运行 - 它'暂停')

#include <stdio.h>

int main() {
    int* pVal = (int *)0x804b008;
    printf("%d", *pVal);
}
Run Code Online (Sandbox Code Playgroud)

我可以看出为什么能够尊重记忆中的任何一点都可能是危险的,所以也许这就是为什么这不起作用.

谢谢!

Car*_*rum 7

您的程序(在调试器中运行)和这个程序将不会在同一个虚拟内存空间中运行; 访问该指针(即使它是有效的)将不会给你任何信息.

您机器上运行的每个程序都有自己的逻辑地址空间.您的操作系统,编程语言运行时和其他因素可能会影响您看到用作任何给定程序的指针的实际文字值.但是一个程序肯定无法看到另一个程序的内存空间,当然除了软件调试器,它们做了一些特殊的技巧来支持这种行为.

在任何情况下,假设您有一个有效的地址,您的调试器应该让您在程序暂停时看到您想要的任何内存.在gdb中x/x 0x804b008可以获得你想要看到的内容.

欲获得更多信息:

  1. 关于虚拟内存的维基百科文章.
  2. gdb 文件