使用readelf和objdump查看ELF常见段

一、查看可重定位目标文件中的段

可重定位目标文件中给出了其中常见的段,解释了每个段的含义和用途。目标文件里有什么(ELF文件结构)中对这些段又做了详细的解释,用到的时候只需查询即可。

列举常用命令:

  • readelf -h elf-file:查看ELF文件头
  • readelf -S objdump -h elf-file:查看段表结构,即一个文件有那些段。
  • objdump -s elf-file:将所有段的内容以16进制打印出来。
  • objdump -d elf-file:将所有代码段的内容反汇编,段表中flagsAX的都为代码段。
  • readelf -p sh_name elf-file:查看字符串表,即sh_name的typeSTRTAB的段的内容。

查看代码段相关的内容只需要objdump -d反汇编即可;查看数据段相关的值需要objdump -s将16进制打印出来;。

二、查看静态链接中的段

静态链接就是就是将几个输入目标文件加工后合并成一个输出文件,整个链接过程分两步:空间与地址分配、符号解析与重定位。

列举常用命令:

  • objdump -r elf-file:查看重定位表中的内容,rel.*rela.*开头的段(type为RELA)均为重定位表。
  • readelf -r elf-file:也可以看查看重定位表中的信息。
  • readelf -sobjdump -tnm elf-file:查看符号表

三、查看动态链接中的段

动态链接的3大步骤:启动动态链接器本身 → 装载所有需要的共享对象 → 重定位和初始化。

相关的段有.interp(动态链接器的位置).dynamic(动态链接所需信息).dynstr(动态符号表)以及动态链接重定位表

列举常用命令:

  • readelf -l elf-file:查看程序头。
  • readelf -d elf-file:查看.dynamic段中的内容。
  • readelf -sD elf-file:查看ELF文件的动态符号表及其哈希表。
  • objdump -R elf-file:查看动态重定位信息,也可以使用readelf -s查看。

四、readelf常用命令

在这里插入图片描述

五、objdump常用命令

用法:objdump <选项> <文件>
    显示对象<file>的信息
    至少要给出以下开关之一:
    -a, --archive-headers 显示档案头信息
    -f, --file-headers 显示整个文件头的内容
    -p, --private-headers 显示特定对象格式的文件头内容
    -P, --private=OPT,OPT... 显示对象格式的具体内容
    -h, --[section-]headers 显示section headers的内容
    -x, --all-headers 显示所有头文件的内容
    -d, --disassemble 显示可执行部分的汇编器内容
    -D, --disassemble-all 显示所有部分的汇编内容
    -S, --source 将源代码与反汇编混合在一起
    -s, --full-contents 显示所有要求的部分的完整内容
    -g, --debugging 显示对象文件中的调试信息
    -e, --debugging-tags 使用ctags样式显示调试信息
    -G, --stabs 显示(原始形式)文件中的任何STABS信息
    -W[lLiaprmfFsoRt] 或
    --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames、
          =frames-interp,=str,=loc,=Ranges,=pubtypes、
          =gdb_index,=trace_info,=trace_abbrev,=trace_aranges、
          =addr,=cu_index] 显示文件中的DWARF信息
    -t, --syms 显示符号表的内容(s)。
    -T, --dynamic-syms 显示动态符号表的内容
    -r, --reloc 显示文件中的重定位条目
    -R, --dynamic-reloc 显示文件中的动态重定位条目 @<file><file>读取选项
    -v, --version 显示这个程序的版本号
    -i, --info 列出支持的对象格式和架构
    -H, --help 显示这些信息

 下面的开关是可选的:
    -b, --target=BFDNAME 将目标对象格式指定为BFDNAME
    -m, --architecture=MACHINE 指定目标架构为 MACHINE
    -j, --section=NAME 只显示NAME部分的信息
    -M, --disassembler-options=OPT 将文本OPT传给反汇编程序
    -EB --endian=big 在反汇编时假定为大的endian格式
    --EL --endian=little 在反汇编时假定为小恩典格式
      --file-start-context 从文件的开头列入上下文(与-S一起)。
    -I, --include=DIR 将DIR加入源文件的搜索列表中
    -l, --line-numbers 在输出中包括行号和文件名
    -F, --file-offsets 在显示信息时包括文件的偏移量
    -C, --demangle[=STYLE] 解码经过处理的符号名称,如果指定STYLE,可以是`auto'、`gnu'、
        `lucid', `arm', `hp', `edg', `gnu-v3', `java'或 "gnat"。
    -w, --wide 格式化80列以上的输出
    -z, --disassemble-zeroes 在反汇编时不跳过零块。
      --start-address=ADDR 只处理地址大于等于ADDR的数据
      --stop-address=ADDR 只处理地址为<=ADDR的数据
      --prefix-addresses 在反汇编的同时打印完整的地址
      --[no-]show-raw-insn 在符号反汇编的同时显示十六进制。
      --insn-width=WIDTH 在单行上显示WIDTH字节,用于 -d
      --adjust-vma=OFFSET 在所有显示的部分地址上增加OFFSET
      --special-syms 在符号转储中包括特殊符号
      --prefix=PREFIX 在绝对路径中增加PREFIX,用于-S
      --prefix-strip=LEVEL 剥离-S的初始目录名称
      --dwarf-depth=N 不显示深度为N或以上的DIEs
      --dwarf-start=N 显示以N开头的DIE,在相同的深度上或更深
      --dwarf-check 做额外的矮人内部一致性检查。     
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yelvens

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值