已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LinuxLinux 下二进制代码的阅读下二进制代码的阅读 大多数时候 我们研究的是如何阅读源代码 但在一些情况下 比如源代码不公开或得到源代码的代价很高的情况下 我们又不得不需 要了解程序的行为 这 时阅读二进制文件就非常重要 假设现在有一个二进制可执行文件 我们木有源代码 但要了解它的实现 这 里仅简单列出一些常用的工具 阅读方式可分为两个方面 静态阅读和动态阅读 静态阅读静态阅读 首先 file 命令可以查看可执行文件的大体信息 比如是哪种格式的 哪个体系结构的 有没有调试信息等 这些决定了需要用哪个版 本的工具进行进一 步查看 比如如果是 arm 体系的可执行文件就可用 arm toolchain 里的工具 如 arm eabi objdump arm eabi gdb 等 众所周知 GNU Binutils 提供了一系列解析和操作二进制文件的工具 最常用的如 objdump 其最主要的功能之一是反汇编 objdump d libxxx so 其它常用选项包括 x 打印所有头信息 s 打印所有段的内容 S 将反汇编和源代码一起打印 r 打印重定位表 R 打印动态重定位表 D 打印所有段 即不止代码段 t 打印符号表 和 nm 的功能类似 但格式不一样 T 只打印动态链接的符号表项 等等 readelf 命令主要用于查看 elf 文件的元信息 如段信息等 如查看可执行文件的头信息 readelf h libxxx so 其它常用选项包括 s 打印符号表 r 打印重定位表 l 打印装载属性 S 打印段表 等等 除了以上两个用得最多的 其它一些辅助工具有时也必不可少 nm 打印符号表 c filt 把 c 符号 unmangle strip 把调试信息删除 strings 看文件中的字符串 ldd 查看依赖关系 等等 动态阅读动态阅读 要了解可程序的行为 最可靠的还是看二进制文件跑起来时的样子 很多时候 由于运行环境复杂 特别是多线程情况下 动态阅读能 发现很多静态阅读所不可能发现的东西 首先 在 proc pid pid 为进程号 下记录了二进制文件跑起来后的很多信息 如通过 proc pid maps 可以知道该程序链接了哪些库 分别被加载在了什么地方 这样 知道了错误地址 理论上就可以找到相应库的对应反汇编代码 proc pid mem 是进程所用的内 存镜像 proc pid stat 则记录了中断统计信息等 proc pid cmdline 则记录了启动程序的命令行 其次 通过 trace strace lstrace 可以看程序有哪些系统调用 strace 用于跟踪系统调用 ltrace 用于跟踪动态库调用 如对于在 proc pid maps 中看到的一些匿名内存映射 想要看它们是在什么时候或是在哪被创建可以用 strace f p 3742 e trace mmap2 open mprotect tee tmp trace 其中 3742 为进程 ID 这里只过滤出关于内存映射的函数 最后 指令级动态阅读的神器还属 gdb 在 gdb 中查看寄存器信息可用 gdb i r 在调试过程中打印出反汇编代码可用 gdb disass addr 或者 gdb x 10i addr 然后就可以和 objdump 出来的反汇编结合着看了 如 GOT 表之类的信息在静态阅读时是无意义的 只有这时才能看 各种 break point 能让我们迅速定位到我们关注的地方 watch point 在指定数据被访问时程序停止 break point 在指定代码被执行时程序停止 因为很多时候库不带 symbol 所以得直接设在地址上 break addr catch point 在指定事件发生时程序停止 如进程创建 动态链接库加载及异常 条件断点有时很有用 break if 但这玩意一旦设上不是一般的慢啊 gdb 中的 bt 和 info frame 命令常用来看堆栈信息和函数调用关系 但有时因为 bug 栈被写坏了 但如果不是被写得很坏 查看栈的内 容常通常能找到一些线索 gdb x 40 x sp 该命令是查看 sp 指向区域的 40 个 byte 的内存内容 该命令也可用来查看任意指定地址的内存内容 关于 gdb 常用的功能 其它的一些 gdb 使用备忘 一些相关资料 http www linuxforums org articles understanding elf using readelf and objdump 125 html elfutils 0 148 http www linux it rubini docs binfmt binfmt html GNU binutils i 表示 insert 跟 b 作用相同 3 列出库中已有成员 ar t liba a 即可 如果加上 v 修饰符则会一并列出成员的日期等属性 4 删除库中成员 ar d liba a a c 表示从库中删除 a c 成员 如果库中没有这个成员 ar 也不会给出提示 如果需要列出被删除的成员或者成员不存在的信息 就加上 v 修 饰符 5 从库中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中学生物理竞赛备战提升解题技巧指导书
- 室内装潢设计风格选择实施指南
- 城市道路照明系统单灯控制改造可行性分析
- 商业营销策划合同
- 快乐读书小天地小学主题班会课件
- 农业科技精准农业种植技术实施方案
- 生产流程中优化排班时间指导书
- 绿色环保可持续工业制造节能减排技术实施方案
- 椎管内肿瘤患者的泌尿系统护理要点
- 初中数学游戏趣味说课稿2025年
- GB/T 27614-2011生物防治物和其他有益生物的输入和释放准则
- 中债托管结算考试原题
- 部编语文二年级下册第一单元总复习-课件
- 拆除爆破基础知识课件
- 北师大版小学数学二年级下册期末专项复习(竖式计算并验算)
- 在安全生产月启动仪式上的主持词
- 胸腔镜肺段切除术解剖基础
- 高分子材料完整版课件
- 一年级一班主题班会《我爱我班》ppt
- 完整版:美制螺纹尺寸对照表(牙数、牙高、螺距、小径、中径外径、钻孔)
- gcp证书试题+答案
评论
0/150
提交评论