当我在做“学习C语言的艰苦之路”例子时,我想到:
我设置了int a = 10;但是这个值10实际上在哪里?当我的程序正在运行时,我能手动从外部访问它吗?
这里有一个小的C代码片段供演示:
int main (int argc, char const* argv[]) {
int a = 10;
int b = 5;
int c = a + b;
return 0;
}
我打开了GNU项目调试器(GDB),然后输入:
break main
run
next 2
据我所知,0x7fff5bffb04是int c的一个内存地址。然后我使用hexdump -C /dev/mem系统调用将整个内存转储到终端中。
现在的问题是,在这个庞大的十六进制转储中,我应该在哪里寻找变量c? 我希望能够根据地址
0x7fff5bffb04
找到它的值,即15
。此外,奖励问题是,hexdump -C中的每一列代表什么?(我知道最后一列是ASCII表示)请看下方图片:
0x7f...
这个地址是虚拟的。除非你知道虚拟地址与物理地址之间的映射关系,否则无法使用它来定位物理内存转储文件中的内容。(第一栏是“地址”(从文件开始算起的字节数),最后一栏是ASCII表示,中间是数据。) - Matargv
定义为char const *[]
? - obataku