- 5
- 0
- 约1.81万字
- 约 8页
- 2017-08-23 发布于河南
- 举报
二进制代码阅读20130406
HYPERLINK /xkfz007/articles/2659359.html Linux下二进制代码的阅读
大多数时候,我们研究的是如何阅读源代码。但在一些情况下,比如源代码不公开或得到源代码的代价很高的情况下,我们又不得不需要了解程序的行为,这 时阅读二进制文件就非常重要。假设现在有一个二进制可执行文件,我们木有源代码,但要了解它的实现,这里仅简单列出一些常用的工具。 阅读方式可分为两个方面:静态阅读和动态阅读。
静态阅读
首先,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++符号unmanglestrip 把调试信息删除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 condition,但这玩意一旦设上不是一般的慢啊。。。
gdb中的bt和info frame命令常用来看堆栈信息和函数调用关系。但有时因为bug栈被写坏了,但如果不是被写得很坏,查看栈的内容常通常能找到一些线索:(gdb) x/40x $sp该命令是查看$sp指向区域的40个byte的内存内容。该命令也可用来查看任意指定地址的内存内容。
关于gdb常用的功能: HYPERLINK /%E7%94%A8GDB%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F /%E7%94%A8GDB%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F其它的一些gdb使用备忘: HYPERLINK /ariesjzj/article/det
您可能关注的文档
- 人教版生物八上第二节111《 人类对细菌与真菌利用》.ppt
- 人教版五年级语文上册第六单元《17地震中父与子》第二课时PPT.ppt
- 人心脏发育候选基因hole功能研究.pdf
- 人教版高中数学1.1.3 第2课时补集与综合应用.ppt
- 亚洲与欧洲第一课时名称与地形(用).ppt
- 交换机基本操.ppt
- 什么决定国家标准制定话语权_技术创新还是政治关系_林洲钰.pdf
- 什么是阿里金融“进化”核心?.pdf
- 从DWG导入SKP后封面问题sketchupbbs.doc
- 从XML生成可与Ajax共同使用JSON.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 2025高中英语教师课程标准考试模拟试卷及参考答案.docx VIP
- 第12课 绿意再生课件-赣美版(2024)初中美术七年级下册.pptx VIP
- 2025年青岛西海岸新区自主招生化学试题及答案.docx VIP
- 2024-2025学年江苏卫生健康职业学院单招《英语》考前冲刺练习(真题汇编)附答案详解.docx VIP
- GJ B 2446-2-2013 J30系列微矩形电连接器详细规范.pdf VIP
- 2025年内蒙古中考物理试卷及答案.docx VIP
- 第11课+传递绿色理念+课件+2024—2025学年赣美版(2024)+初中美术七年级下册.pptx VIP
- 2025年江苏卫生健康职业学院单招《数学》真题带答案详解(模拟题).docx VIP
- 2023年广东省中考道德与法治试卷真题及答案详解.pdf
- 相变的软模理论.ppt VIP
原创力文档

文档评论(0)