- 在机器码中 数据与代码都是相同的二进制数字,你无法判断那些数据是代码 那些数据是数据
反汇编文件都有自己的文件格式,window下的pe文件,liunx下的eldf文件,这些类型文件含有一种机制就可以用来确定文件中包含的代码和代码入口点,通常表现为层级文件头的形式
线性扫描反汇编
- 确定反汇编指令位置的方式:一条指令结束,另一条指令开示的地方
- 确定起始位置最为困难:扫描被程序文件标注为代码的节所包含的全部的机器指令,线性扫描完整个代码段
- 线性扫描并不会识别分支等非线性指令来了解程序的控制流
- 优点:完全覆盖程序的所有代码段
缺点:无法考虑到代码中混杂的数据
递归下降反汇编
强调控制流的概念:控制流根据一条指令是否被另一条指令引用来决定是否对其进行反汇编
根据指令对指针过的影响来分类:
- 顺序流:将执行权传递给紧随其后的下一条指令
- 条件分支:条件真假影响执行路径,若不跳装则以线性模式执行指令,并以线性模式扫描下一条汇编指令,但是在静态环境中是无返判断条件判的结果,因此递归下降会同时反汇编这两条指令,并将分支目标指令的地址添加到稍后才进行反汇编的地址列表,推迟它的反汇编过程
- 无条件分支:执行权传给一条指令,但这条指令可以在任何位置,然后也没啥理由反汇编紧跟在无条件分支后面的指令
- 函数调用指令:
来源:https://www.cnblogs.com/Alex3O/p/12432454.html