add.c
int shared = 1;
int add(int num1, int num2)
{
int sum = 0;
sum = num1 + num2;
return sum;
}
编译add.c成.o文件
gcc -c add.c(-c表示只编译不链接)
file add.o输出结果如下:
此结果表明add.o是个重定位文件。
查看elf header可查看到更详细信息:readelf -h add.o
由于是重定位文件,ELF中并没有program header,entry point为0x0,有11个section. section header的字符串表在section 中的索引为8.ELF header的size为52.
通过readelf -S add.o 查看section header。
Off这一列是表示section在ELF文件中的偏移量,.text的偏移量是0x34,转换成十进制正好是52(ELF header大小),说明header后面紧接着是.text。
.text内容可以通过objdump来查看:objdump -s -d add.o(-s表示将内容以16进制打印出来,-d表示反汇编)
.text只包含add函数,其大小为0x1d.
.data保存了初始化了的全局变量和静态变量。在add.c中.data只包含shared这一个int型变量,所以其size为4。
.data的偏移量为0x34+0x1d=0x51,由于.data是4字节对其的,所以offset为0x54.
.bss保存的是未初始化的全局变量和局部静态变量。
时间: 2024-12-28 18:58:34