我正在学习链接器如何在 Linux 上工作。有人告诉我,链接器将为可执行文件生成一些符号,例如__executable_start
,这是程序启动的地址。
另外,我知道 ELF 文件中有一个“入口点地址”。
所以我不知道他们之间有什么区别。
我在下面写了一个简单的代码:
#include <stdio.h>
extern char __executable_start[];
int main()
{
printf("Executable Start %X\n", __executable_start);
return 0;
}
我用 GCC 编译它并得到一个名为a.out
.
当我执行它时,它给了我Executable Start 4CEDA000
.
然后我执行命令readelf -h a.out
,关于入口点的输出是Entry point address: 0x540
嗯,很明显,0x540
而且4CEDA000
完全不同。