当我在做“学习C硬路”的例子时,我心想:如何在内存hexdump中找到变量的地址?
我设置int a = 10;但是实际上这个值是10呢?我可以在程序运行时从外部手动访问它吗?
这里是为了演示一个小的C代码片段:
int main (int argc, char const* argv[]) {
int a = 10;
int b = 5;
int c = a + b;
return 0;
}
我打开了The GNU Project Debugger(GDB),并进入:
break main
run
next 2
从我的理解0x7fff5bffb04是内存地址的int c
。然后我用hexdump -C/dev/mem系统调用将整个内存转储到终端。
现在的问题是我在哪里寻找变量c在这个巨大的十六进制转储?我的希望是,鉴于地址0x7fff5bffb04
我可以找到它的价值,这是15
。另外,奖励问题,hexdump -C中的每一列代表什么? (我知道,最后一列是ASCII表示)
的'0x7f的...'地址是虚拟的。除非您知道虚拟 - >物理映射,否则不能使用它来查找物理内存转储中的内容。 (第一列是“地址”(自文件开始以来的字节数),最后是ascii表示,中间是数据。) – Mat
@Mat:谢谢。我可以打印物理内存地址,还是可以用十六进制转储虚拟内存而不是物理内存?什么是可能的解决方案? –
为什么你将'argv'定义为'char const * []'? – oldrinb