命令readelf,objdump

1 readelf

用于查看elf文件的信息,关于elf我也不太清楚,是可执行链接格式,其中so库就是一种,可用来查看so库中的符号信息:

readelf –s libname

2 objdump -t

也可查看符号信息,与readelf不同的是只显示了.symtab部分的信息.

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

-d参数可以将所有包含指令的段反汇编;

-h参数是将ELF文件的各个段的基本信息打印出来,

-x参数可以将更多的信息打印出来

3 nm
nm用来列出目标文件中的符号,可以帮助程序员定位和分析执行程序和目标文件中的符号信息和它的属性。

4 file

file
原来用这个命令即可以看到文件的类型了。

 

关于目标文件中信息的存储形式:

会根据不同的属性将这些信息以“段”的形式存储;

程序源代码编译后的机器指令经常被放在代码段(Code Section)里,代码段常见的名字有“.code”或是“.text”;全局变量和局部静态变量数据放在数据段(Data Section),数据段名字为“.data”,未初始化的全局变量和局部静态变量默认值都为0,本在他们可以放在.data段,但是因为都是0,所以为他们在.data段分配空间并且存放数据0是没有必要的,所以放在.bss段,.bss段只是为未初始化的全局变量和局部静态变量预留位置而已,它并没有内容,所以它在文件中也不占据空间。

ELF文件的开头是一个“文件头”,它描述了整个文件的文件属性,包括文件是否可执行、是静态链接还是动态链接及入口地址(如果是可执行文件)、目标硬件、目标操作系统等信息,文件头还包括一个段表(Section Table),

总体来说,程序源代码被编译以后主要分成两种段:程序指令和程序数据。代码段属于程序指令,而数据段和.bss段属于程序数据。

其实还有几个段:

.rodata:只读数据段

.comment:注释信息段

.note.GNU-stack:堆栈提示符

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值