【问题标题】:Physical or Virtual address identification物理或虚拟地址识别
【发布时间】:2018-10-21 09:21:30
【问题描述】:

我很难弄清楚物理地址和虚拟地址之间的关系。我有一个二进制文件,我正在 IDA 反汇编程序中加载它,它显示了地址,例如 0x000008a1 。当我在 gdb 中调试相同的二进制文件时,它显示我的地址为 0x5555555508a1

当我在 gdb 中执行 info proc mappings 时,它会在 libc 0x7ffff7a0d000 中给我一个不寻常的地址,该地址以 0x7ff.... 开头。

所以,我想知道

1.) 为什么 gdb 会在 IDA 显示的正确地址之前附加0x0x55555555

2.) 这些地址是什么?虚拟还是物理?

3.) 为什么libc地址以0x7ffff7a开头?

4.) 如何计算正在运行的进程的物理地址?

【问题讨论】:

    标签: debugging operating-system gdb reverse-engineering memory-address


    【解决方案1】:

    IDA 反汇编程序显示地址,例如 0x000008a1 。当我在 gdb 中调试相同的二进制文件时,它显示我的地址为 0x5555555508a1 。

    您有一个position-independent executable(最近这是许多发行版的默认设置)。二进制文件被重定位到地址0x555555550000

    默认情况下,GDB 禁用地址随机化,因此您将始终获得一致的重定位地址。您可以在 GDB 下使用 set disable-randomization off 重新启用随机化,然后二进制文件将在每次运行时重新定位到不同的地址。

    当我在 gdb 中进行 info proc 映射时,它会在 libc 0x7ffff7a0d000 中给我一个不寻常的地址

    该地址没有任何异常

    这些地址是什么?虚拟还是物理?

    它们是虚拟地址:您从不在用户空间程序中看到物理地址,只有内核处理它们。

    【讨论】:

    • 那么0x7ffff7a0d000 地址是什么? libc地址?
    • @Adshead 是的。你觉得它有什么令人惊讶的地方?
    猜你喜欢
    • 2014-03-15
    • 2015-05-04
    • 2013-05-05
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多