首页 > 代码库 > ELF学习
ELF学习
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保存的是未初始化的全局变量和局部静态变量。
ELF学习
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。