3.19 binutils工具集
GNU编译器
GCC编译器
GNU工具集:binutils tools
GNU工具集
协助软件的编译、链接
不同文件格式的转换
针对特定处理器的一些处理
常用binutils工具
工具名 | 用途 |
---|---|
as | 汇编器,将汇编文件汇编为目标文件 |
ld | 链接器,将几个目标文件和库组合成一个文件 |
nm | 列出目标文件中的符号 |
size | 列出目标文件的各个段的大小和总大小,如代码段、数据段等 |
strip | 移除目标文件中的符号,进行文件压缩、给文件“减肥” |
gprof | 显示分析数据的调用图表 |
ar | 创建、修改和提取归档目标文件(静态库) |
addr2line | 将程序地址翻译成文件名和行号 |
objcopy | 将一种目标文件翻译成另一种:.bin.elf |
objdump | 显示目标文件的信息、反汇编 |
readelf | 显示有关ELF文件的信息 |
ranlib | 创建一个归档的内容,并存储在归档内,索引列出其成员中可重定位的目标文件定义的所有符号 |
strings | 给每个给定的文件输出不短于指定长度的所有可打印字符序列,对于目标文件,默认只打印初始化和加载部分的字符串 |
libopcodes | 一个库,用于处理opcodes处理器指令的可读文本版本 |
readelf命令
参数 | 说明 |
---|---|
-a | 读取所有符号表的内容 |
-h | 读取ELF文件头 |
-l | 显示程序头表(可执行文件,目标文件无该表) |
-S | 读取节头表(section headers) |
-s | 显示符号表 |
-e | 显示目标文件所有的头信息 |
-n | 显示node段的信息 |
-r | 显示relocate段的信息 |
-d | 显示dynamic section信息 |
-g | 显示section group的信息 |
objdump用法
参数 | 说明 |
---|---|
-x | 输出目标文件的所有header信息 |
-t | 输出目标文件的符号表 |
-h | 输出目标文件的节头表信息 |
-j | section 仅反汇编指定的section |
-S | 将代码段反汇编同时,将反汇编代码和源码交替显示 |
-D | 对二进制文件进行反汇编,反汇编所有的section |
-d | 反汇编代码段 |
-f | 显示文件头信息 |
-s | 显示目标文件的全部header信息,以及它们对应的16进制文件代码 |
objcopy用法
主要用途:拷贝一个目标文件的内容到另一个目标文件中、目标文件
格式转换
参数 | 说明 |
---|---|
-R name | 从文件中删除所有名为.name的段 |
-S | 不从源文件拷贝重定位和符号信息到输出目标文件 |
-g | 不从源文件拷贝调试符号到输出目标文件 |
-j section | 只拷贝指定的section到输出文件 |
-K symbol | 从源文件拷贝名为symbol的符号,其它不拷贝 |
-N symbol | 不从源文件拷贝名为symbol的符号 |
-L symbol | 将符号symbol文件内部局部化,外部外部不可见 |
-W symbol | 将符号symbol转为为弱符号 |
ELF文件转换为BIN文件
arm-linux-gnueabi-objcopy –O binary -R .comment
-S uboot uboot.bin
-O binary:输出为原始的二进制文件
-R .comment:删除不需要的section
-S:重定位、符号等信息不要输出到目标文件uboot.bin中
uboot : 待转化的elf文件
BIN文件转换为HEX文件
objcopy -I binary -O ihex uboot.bin uboot.hex
文件“瘦身”
objcopy -R .comment a.out
# 将目标文件中不需要的信息去掉