千里之行始于足下——编译器助手(binutils与elf文件)

任何技艺的提升都在于积累与总结;而对工具与流程的认识,有利于我们更深入的理解系统结构与执行环境。

任何东西都要硬币一样有正反两面:

感谢GNU,为我们提供了一整套完整的开发工具与运行环境,让我们能够更容易地开发与理解软件系统。

唾弃GNU,为我们提供了一整套完整的开发工具与执行环境,让我们在复杂的软件环境中沉重的学习,同时也丧失了自我的“创造力”。

然而对于工具与环境的把控,也正是提升与提炼自己的好机会,能让我们更加深入的理解软件系统,从而才能创造出更完备,更精炼的程序与系统。


    认识ELF文件与Binutils工具,是我们熟悉编译工具的基本步骤;因为在Linux平台或者说GNU环境下的编译器——GCC,只是工具中重要的一环与很友善的接口界面而已。

一.ELF文件(在linux上的可执行与链接的二进制文件)的要点:

1.linux平台中存在的主要形式:*.o(编译与汇编后的目标文件)*.so(链接之后的动态链接库),*.out(链接之后的可执行文件)*.ko(编译链接之后的驱动模块);

2.分析二进制文件的一个很有效的方式,就是用对应的头文件进行数据模块化的读取,而ELF文件的完整描述方式为elf.h文件:http://linux.die.net/include/elf.h

3.ELF文件简介,该文件主要由ELF头信息与程序头信息表或者段表组成,详细的描述见:http://linux.die.net/man/5/elf;或者http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic.html#ELF-GENERIC

 

二.Binutils工具(该工具一般不需要编译,只有在制作交叉编译工具时)介绍http://www.sourceware.org/binutils/

1.主要内容,参考LFS7.6Linux From Scratch6.13.2

a)工具集——默认的命令行有很多参数,但是实际使用的确很少,用如下表简单总结一下

命令

功能

常用参数

意义

实例

说明

ar

创建、修改、抽取静态库(*.a归档文件)

r

创建

ar -r libXX.a YY.o

 

d

删除obj

ar -d libXX.a YY.o

 

x

抽取obj

ar -x libXX.a YY.o

 

t

查看有哪些成员

ar -t libXX.a

 

nm

列举obj文件的符号表

 

 

nm XXX

 

objcopy

拷贝与转换格式obj文件中的部分内容

j

提取elf文件分区

objcopy -j XX YY

 

R

删除elf文件分区

objcopy -R XX YY

 

S

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值