objcopy/objdump/readelf等工具使用

1. objcopy 复制及修改目标文件
    -I  :   输入文件的格式(binary, elf32-i386等)
    -O  :   输出文件的格式
    -B  :   二进制文件体系结构(i386, arm等)

    -R  :   删除不用的section(.comment  .note 等)
    -j  :   仅留下有用的section(.text  .data 等)
    -S  :   不复制重定位和符号信息
    -K  :   保留某个符号
    -N  :   去掉某个符号
    -L  :   使某个符号local化
    -W  :   使某个符号weaken化

    例如: objcopy -S -O binary -j .text  a.out  a.bin  只保留.text的二进制文件.


2. objdump 显示目标文件信息
    -f  :   显示文件头信息(参考readelf -h)
    -d  :   反汇编目标文件中需要执行指令的section
    -D  :   反汇编目标文件中所有的section
    -h  :   显示section 头信息(参考readelf -S)
    -x  :   显示所有信息(参考readelf -a)
    -s  :   显示各个section的十六进制码以及对应的ascii码
    -m  :   CPU架构
    -b  :   目标文件格式,默认elf32,可以指定为binary二进制格式.

    例如: objdump -D -b binary -m i386 a.bin  对二进制文件进行反汇编


3. readelf 显示目标elf文件信息

    -a  :   显示所有信息
    -h  :   显示elf头信息
    -l  :   显示Program Header Table中的每个Entry信息
    -S  :   显示Section Header Table中的每个Entry信息
    -g  :   显示Section Group信息
    -s  :   显示Symbol Table中的每个Entry信息
    -e  :   等同于 -h + -l + -s
    -n  :   显示.note段信息
    -r  :   显示可重定位信息

    -d  :   显示Dynamic Section信息


4. nm 列出目标文件中的符号
    -a  :   列出所有符号,包括debugger-only的符号.
    -A  :   显示文件名
    -g  :   只显示外部符号
    -C  :   将低级符号解码(demangle)成用户级名字,使C++函数名具有可读性.
    -D  :   显示Dynamic符号
    -u  :   仅显示没有定义的符号
    -r  :   反序显示
    -n  :   按地址顺序显示

  nm列出符号的地址,符号类型和符号名字.其中符号说明如下:
    A   :   绝对地址,链接时不改变.
    B   :   符号位于bss数据段
    C   :   符号为common. common symbol是未初始化数据段(参考汇编文件中.common)
    D   :   已初始化数据段中的符号
    G   :   符号位于已初始化数据段中,重要用于small data object提高访问速度.
    I   :   该符号是对另一个符号的间接引用
    N   :   该符号是一个debugging符号
    R   :   只读数据去符号(C语言中的const修饰)
    S   :   符号位于非初始化数据区,用于small object
    T   :   符号位于text section
    U   :   符号未定义
    V   :   该符号是一个weak object
    W   :   弱符号
    ?   :   类型未定义



你可能感兴趣的:(objcopy/objdump/readelf等工具使用)