我想知道为什么Start of section headers
的值是那么远,因为Start of program headers
的值只有64。raedelf -a ./a.out
结果的图片。readelf -a ./a.outxdd
以十六进制读取./a.out
,从0x 580到0x 1000,均为0。从0x 1160到0x 2000,也都是0。
0似乎是节之间的填充符。
我的代码只是
main()
{
printf("Hello world!\n");
return 0;
}
有人能为我解释一下吗?谢谢!
1条答案
按热度按时间ercv8c1e1#
有人能为我解释一下吗?
链接器在放置完所有节之后会生成节头表,因此节头表往往位于文件的最后位置。
此外,节头表在运行时不使用,因此不分配给任何可加载段。由于通常第一个
PT_LOAD
段覆盖ELF报头本身,因此 it 必须具有偏移量0。因此,将节头表放置在除文件末尾之外的任何地方将在段之间创建“间隙”,但是这样的间隙是不期望的。