gpt4 book ai didi

c - 如何在内存 hexdump 中找到变量的地址?

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:35 24 4
gpt4 key购买 nike

当我在做“艰难地学习 C”的例子时,我心想:

I set int a = 10; but where does that value 10 actually? Can I access it manually from the outside while my program is running?

这里有一小段用于演示的 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

据我了解,0x7fff5bffb04int c内存地址。然后我使用 hexdump -C/dev/mem 系统调用将整个内存转储到终端。

现在的问题是,在这个巨大的十六进制转储中,我在哪里寻找变量 c?我希望给定地址 0x7fff5bffb04 我可以找到它的值,即 15。另外,还有一个问题,hexdump -C 中的每一列代表什么? (我知道最后一列是 ASCII 表示)

gdb

hex dump

最佳答案

I then used hexdump -C /dev/mem system call to dump the entire memory into the terminal.

您的 hexdump 转储了物理内存地址。地址0x7fff5bffb04是您正在调试的进程中变量的虚拟 地址。它被映射到某个物理地址,但如果不检查内核映射表,您将无法找到它(正如 Mat 已经在评论中告诉您的那样)。

要检查虚拟地址空间,请使用 /proc/<pid>/mem (正如 Barmar 已经在评论中告诉您的那样)。

但是整个练习毫无意义,因为您已经可以检查 GDB 中的虚拟内存,而您不会看到任何东西当您查看虚拟内存时,GDB 尚未向您展示更方便的 [1]。

[1] 除了你可以看到 GDB 插入的断点,但你不应该理解 :-)

关于c - 如何在内存 hexdump 中找到变量的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12434579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com