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

fdf*_*dfd 3 linux command-line memory dd command

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

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

我试过了,dd但无济于事。

rud*_*dib 6

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

如果要访问物理内存:

如果您已devmem安装:

devmem 0x2000000 
Run Code Online (Sandbox Code Playgroud)

使用 hexdump 的替代方法:

hexdump -C --skip 0x7fffffffeb58 /dev/mem | head
Run Code Online (Sandbox Code Playgroud)

请参阅StackOverflow 上的这个问题

  • 请注意,属于某个进程的*虚拟*内存地址与您可以通过`/dev/mem`访问的*物理*内存地址之间存在差异。OP 可能意味着一个虚拟地址(“程序的”暗示了这一点,尽管他没有具体说明)。 (3认同)

Sté*_*las 6

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

您将希望seek()在该文件中到达您想要的位置,您应该可以使用dd

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

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

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

gdb --batch -ex 'x/u 0x7fffffffeb58' -p "$pid"
Run Code Online (Sandbox Code Playgroud)

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