反编译学习

fangzhengshu 2021-10-18 原文


反编译学习


 最近开始学习基于arm反编译,而至于学习反汇编的原因,或许是头脑发热所做的决定吧……

由于不同平台上的编译环境有较大的不同,因而生成的中间文件以及可执行程序的文件格式都有所不同,如同一机器上,linux系统gcc编译器生成的中间文件为.o文件,而window系统vc工具提供的编译工具cl.exe编译生成的中间文件则是.obj;当然.exe与.elf也是不同的文件类型。

为了方便实例的编译和反编译结果的验证,后续的实例基于如下工具:windows+ADS1.2+IDA5.5,当然,如果你有一个简单的嵌入式硬件平台是最好了。

在描述反编译过程之前,我再简单的赘述一下C语言的一点基本的知识,C程序代码到可执行程序的流程主要分为如下几个步骤:
1、预处理(.c),不过由于预处理只进行了一些替换等工作,我们后续不做分析,仅从汇编开始;
2、编译,优化程序(.s,.asm);
3、汇编(.o,.a,.ko);
4、链接(.elf,.axf);

嵌入式环境中,常见的文件类型主要是.o,.a,或者是.elf和.axf文件,这些程序的实现我们是不可见的,因此需要把他们还原为可读的C程序代码,了解到上述的编译过程,我们基本上既可以大致明白反编译的基本过程了。反编译的基本过程如下:
1、*old.o–>*old.asm:拿到.o文件使用IDA反汇编工具可以查看汇编代码,如果你拿到的是.a文件,该文件则是通过工具把几个.o文件链接到一起的,我们也可以使用类似的步骤把.a文件分离成一个个.o文件,进而再一个个分析;当然,你可以直接使用IDA工具打开.a文件,再选择具体分析哪一个.o文件;
2、*old.asm–>*new.c:分析.map中汇编的实现,通过汇编指令的分析得出相应的C源代码;
3、*new.c–>*new.asm:把反编译生成的new*.asm与*old.asm通过beyond compare进行比较,分析差异,知道确定差异问题在语义上基本没有问题;
4、*new.c–>*new.axf:生成可执行程序对比可执行程序的执行结果是否有差异,没有差异基本证明反编译结果的正确性,当然如果最初拿到的是*old.o文件,那我们就需要生成对应的*new.o文件,并使之替换原始的*old.o文件,然后添加到工程中,再进一步验证其正确性。

发表于
2011-10-03 20:44 
0KB 
阅读(2349
评论(0
编辑 
收藏 
举报

 

版权声明:本文为fangzhengshu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/fangzhengshu/archive/2011/10/03/2210715.html

反编译学习的更多相关文章

随机推荐

  1. day81_淘淘商城项目_14_项目发布 + Linux下安装mysql + tomcat热部署 + 数据库分库分表 + Mycat学习_匠心笔记

    第十四天: 1、Linux上mysql的安装 2、系统的部署 3、mycat的介绍 4、项目总结 5、面试中的 […]...

  2. 浅谈Linux系统中如何查看进程

     进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。一般来说,Linux系统会在进程之间 […]...

  3. auto类型推导

    引言 auto : 类型推导. 在使用c++的时候会经常使用, 就像在考虑STL时迭代器类型, 写模板的时候使 […]...

  4. angular入门系列教程2

    angular-example 主题: 本篇主要介绍下angular里的一些概念,并且在咱们的小应用上加上点料 […]...

  5. git 分支提交到主分支步骤

    1  在桌面上执行 git clone  (远程仓库地址) 2  把项目放到clone过来的文件中 3  查看 […]...

  6. 证券交易交易系统开发与设计/券商系统交易架构搭建

    证券交易系统是金融市场上能够提供的最有流动性,效率最高的交易场所。 和传统的商品交易不同的是,证券交易系统提供 […]...

  7. 作图直观理解Parzen窗估计(附Python代码)

    本文对parzen窗估计做了简单叙述,针对《模式分类》(第二版)内容进行简单探讨,使用matplotlib库直 […]...

  8. 我的北京工作居住证申请之旅 – coderidea

    我的北京工作居住证申请之旅 2018-12-26 08:56  coderidea  阅读(1084)  评论 […]...

展开目录

目录导航