C语言的素养目标,程序员自我修养3-目标文件

可执行文件:在windows中为PE文件,在linux中为ELF文件

0657cf954f39

图片.png

0657cf954f39

图片.png

在linux下使用file命令查看相应的文件格式:

file foobar.o

file /bin/bash

file /lib/ld-2.5.1.so

0657cf954f39

图片.png

分析:

一般C 语言的编译后执行语句都编译成机器代码,保存在.text段;

已经初始化的全局变量和局部静态变量都保存在.data段;

未初始化的全局变量和局部静态变量放在.bss段。

只读数据段.rodata

注释信息段.comment

堆栈提示段.note.GNU-stack

.plt和.got:动态链接的跳转表和全局入口表

objdump -h 查看目标文件的结构和内容 或readelf

ELF中结构:

0657cf954f39

图片.png

objdump -s将所有段的内容以十六进制的方式打印出来

objdump -d将所有包含指令的段反汇编

objdump -x将文件内容更详细打印出来

ELF文件结构描述:

readelf -h查看文件头

ELF文件类型:

0657cf954f39

图片.png

查看ELF段表:

objdump -h 或readelf -S

查看ELF文件的符号表:

objdump -t/readelf

objdump/readelf/nm

如:nm a.o

举例分析各个符号在符号表中状态:

0657cf954f39

图片.png

第一列Num表示符号表数组的下标,第二列value就是符号值;第三列SIZE为符号大小,第四列和第五列分别为符号类型和绑定信息

,第七列表示该符号所属的段,最后一列是符号名称。

第一个符号永远是个未定义的符号。

特殊符号:

_executable_start:该符号为程序起始地址,不是入口地址,是程序的最开始的地址。

_etext或__etext\etext:代码段结束地址,即代码段最末尾的地址。

_edata或edata:该符号为数据段结束地址,即数据段最末尾的地址。

_end或end:为程序结束地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值