如何使用命令获取内存地址的值?

如何使用命令获取内存地址的值?

在程序的内存地址0x7fffffffeb58处有一个值,我想找出该地址的值。

有没有办法只使用命令来获取值?

我尝试过dd但没有成功。

答案1

要查看进程的内存地址,您可以查看/proc/$pid/mem.另请参阅/proc/$pid/maps进程地址空间中映射的内容。

您需要seek()将该文件内的位置放置到您想要的位置,您应该能够执行以下操作dd

dd bs=1 skip="$((0x7fffffffeb58))" count=4 if="/proc/$pid/mem" |
  od -An -vtu4

将读取该地址处的 4 个字节并将它们解释为无符号 32 位整数。

另一种方法是将调试器附加到进程:

gdb --batch -ex 'x/u 0x7fffffffeb58' -p "$pid"

无论如何,请注意,根据kernel.yama.ptrace_scopesysctl 的值,您可能需要具有超级用户权限才能执行此操作。

答案2

如果要访问特定进程的虚拟内存:参考@Stéphane的回答。

如果要访问物理内存:

如果您已经devmem安装:

devmem 0x2000000 

使用 hexdump 的替代方法:

hexdump -C --skip 0x7fffffffeb58 /dev/mem | head

看到这个问题在 StackOverflow 上。

相关内容