码迷,mamicode.com
首页 > 其他好文 > 详细

ELF学习

时间:2016-12-10 22:01:11      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:blog   ima   add   entry   16进制   文件   ret   head   http   

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学习

标签:blog   ima   add   entry   16进制   文件   ret   head   http   

原文地址:http://www.cnblogs.com/fellow1988/p/6158240.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!