在程序的内存地址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_scope
sysctl 的值,您可能需要具有超级用户权限才能执行此操作。
答案2
如果要访问特定进程的虚拟内存:参考@Stéphane的回答。
如果要访问物理内存:
如果您已经devmem
安装:
devmem 0x2000000
使用 hexdump 的替代方法:
hexdump -C --skip 0x7fffffffeb58 /dev/mem | head
看到这个问题在 StackOverflow 上。