反汇编基本算法

Posted blacksunny

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反汇编基本算法相关的知识,希望对你有一定的参考价值。

  1. 确定进行反汇编代码区域,这并不像那么简单。通常,指令与数据混杂在一起,区分它们就显得非常重要。反汇编可执行文件:该文件必须符合可执行文件的某种通用格式,如Windows所使用的可移植可执行(Portable Executable, PE)格式或许多Unix系统常用的可执行和链接格式(ELF)。
  2. 知道指令的起始地址后,下一步就是读该地址(或文件偏移量)所包含的值,并执行一次表查找,将二进制操作码的值与它的汇编语言助记符对应起来。根据被反汇编的指令集的复杂程度,这个过程可能非常简单,也可能需要几个额外的操作,如查明任何可以修改指令行为的前缀以及确定指令所需的操作数。对于指令长度可变的指令集,如Intel x86,要完全反汇编一条指令,可能需要检索额外的指令字节。
  3. 获取指令并解码任何所需的操作数后,需要对它的汇编语言等价形式进行格式化,并将其在反汇编代码中输出。有多种汇编语言输出格式可供选择。如X86所使用的两种主要格式为Intel格式和AT&T格式。
  4. 输出一条指令后,继续反汇编下一条指令,并重复上述过程,直到反汇编文件中的所有指令。
  5. 有大量的算法可用于确定从何处开始反汇编,如何选择下一条反汇编的指令,如何区分代码与数据,以及如何确定何时完成对最后一条指令的反汇编。线性扫描和递归下降是两种最主要的反汇编算法。

以上是关于反汇编基本算法的主要内容,如果未能解决你的问题,请参考以下文章

逆向工程部分

数据结构算法 (树 的基本算法)

反汇编基本原理与x86指令构造

基本排序算法

C++反汇编与逆向分析技术揭秘的目录

自制反汇编逆向分析工具 迭代第四版本