【问题标题】:Entry Point of elf executable headerelf 可执行头的入口点
【发布时间】:2017-11-18 19:23:46
【问题描述】:

为什么elf的入口点是0x8048320. 来自This的问题,它是操作系统内核用来映射进程的虚拟地址。但是From This,进程映射的虚拟地址(在x86处理器中)是0xc0000000(用户空间低3GB,内核空间高1GB)。现在这个 0x8048320 起始地址背后的理论是什么。不应该是0c0000000h吗??

问候,

【问题讨论】:

标签: linux memory-mapping virtual-address-space


【解决方案1】:

入口点不是可执行文件映射的开始。它是程序启动时将运行的第一条指令的地址。因此,它通常位于.text 部分的中间。

如果您使用 GCC 或兼容的编译器,它将是函数 _startlibc 中的地址。那就是最终会调用你的main()的函数。

从您的示例中,0x8048320 基地址 可能是 0x8000000_start 的偏移量将是 0x48320

但是,在我的机器中:

$ readelf -h /usr/bin/ls | grep Entry
Entry point address:               0x404030

所有这些虚拟地址通常由编译器和/或链接器决定。

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2012-12-09
    • 2017-10-13
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2014-05-24
    • 2015-09-10
    相关资源
    最近更新 更多