简单的 C 文件:
#include <stdio.h>
int main(){
printf("Hello World");
return 0;
}
编译代码后,使用readelf -a a.out
,精灵信息如下:
问题:
- 几个部分出现在不同的段中,例如第 2 段和第 3 段中的 interp 部分。一个部分如何出现在多个段中?
- 第 2 段的地址来自 0x8048134,但第 3 LOAD 段从 0x8048000 开始,内存大小为 0x004d0。那么这两个部分重叠?两个段如何在内存中重叠?
- 为什么程序头的偏移量和 viraddr 必须以页面大小为模一致?