为什么在x86 Linux中为elf可执行文件加载对齐地址的函数?

时间:2010-05-19 06:48:06

标签: linux loading elf

我一直在寻找x86上的Linux elf可执行文件,主要使用IDA但是 还有gdb。我注意到的一件事是函数总是被加载 在字对齐的地址?谁知道原因? 我不知道有任何x86指令要求启动 在对齐的地址。并且它不能归因于页面对齐原因 页面边界仍然可以在函数内的任何位置。

我很感激任何见解。

感谢。

2 个答案:

答案 0 :(得分:5)

你是对的,指令不需要对齐。在x86处理器上,汇编指令使用从1到至少15个字节的可变长度代码进行编码。

但是从通常在64字节上对齐的缓存中读取指令,并且当代码正确对齐时,执行流水线的某些部分运行得更快:解码,循环,分支预测等。

关于此的最佳信息来源是Agner Fog的文件:http://www.agner.org/optimize/

答案 1 :(得分:1)

对于某些体系结构,数据的对齐决定了每个操作可以复制的数据量。例如,尝试从地址0x4000复制32位可能需要一个32位移动操作,其中从0x4001复制32位可能需要4个8位移动操作。此外,在未对齐的地址上使用32位移动指令可能会触发硬件异常。硬件异常通过一次复制8位来处理,但比从对齐地址复制要慢。

编辑:

这适用于所有数据,而不仅仅是将要执行的数据。因此,函数入口点与开关目标,字符串常量,全局变量和其他数据一致。