1.线性扫描

原理:
一条指令结束,另一条指令开始
关键:
确定起始位置 
流程:
从起始,逐条反汇编指令,直到完成整个代码段
优点:
可覆盖程序的所有代码段
缺陷:
如果代码段中混有数据!
gdb windbg objdump均采用线性扫描

2.递归下降

原理:
根据一条指令是否被另一条指令引用来决定是否对其进行反汇编
顺序流指令
直接解析它后面的下一条指令,如MOV、PUSH、POP
条件分支指令
解析它的所有条件路径,如JNZ
无条件分支指令
反汇编器会尝试定位到跳转的目标,但有可能失败(如JMP EAX,EAX在静态环境下无法确认)
函数调用指令
和无条件分支指令相似,如CALL EAX
一般默认会直接反汇编CALL指令后,但如果函数中有意窜改返回地址,那就坑了,如下例子:
[cpp] view plaincopy
  1. __declspec(naked) void fun()
  2. {
  3. __asm
  4. {
  5. inc DWORD PTR[esp] // 此时esp的内容即为返回地址,我们让它的内容加1
  6. retn
  7. }
  8. }
  9. int _tmain(int argc, _TCHAR* argv[])
  10. {
  11. __asm
  12. {
  13. call fun
  14. inc  eax // 这一句会被跳过
  15. mov ebx,ebx
  16. }
  17. return 0;
  18. }

上面就不会执行inc eax这一句,也就是inc eax这句其实不应该被反汇编的,应该直接从后一句开始,如果不是inc eax,而是一段数据呢,那就OVER了

返回指令
由于RET返回的地址实际是从栈中取得的,但反汇编器不可能访问到栈,所以就会终止
优点:
可以区别代码和数据
IDA使用的是递归遍历反汇编算法

0.IDA-基本的反汇编算法相关推荐

  1. 0.IDA的反汇编算法方式

    1.线性扫描 原理: 一条指令结束,另一条指令开始 关键: 确定起始位置 流程: 从起始,逐条反汇编指令,直到完成整个代码段 优点:        可覆盖程序的所有代码段 缺陷:        如果代 ...

  2. 反汇编算法介绍和应用——递归下降算法分析

    上一篇博文我介绍了Windbg使用的线性扫描(linear sweep)反汇编算法.本文我将介绍IDA使用的递归下降(recursive descent)反汇编算法.(转载请指明来源于breaksof ...

  3. 反汇编算法介绍和应用——线性扫描算法分析

    做过逆向的朋友应该会很熟悉IDA和Windbg这类的软件.IDA的强项在于静态反汇编,Windbg的强项在于动态调试.往往将这两款软件结合使用会达到事半功倍的效果.可能经常玩这个的朋友会发现IDA反汇 ...

  4. (转)反汇编算法介绍和应用——线性扫描算法分析

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/breaksoftware/articl ...

  5. 2020-11-21(线性扫描反汇编算法和递归下降扫描反汇编算法)

    push ebp jmp addr1 db 0xE8 addr1: mov abp,esp sub esp,0x100 根据线性扫描反汇编算法,当反汇编器解析完jmp addr1指令后,会接着从下一个 ...

  6. IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总

    IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总 ********************************** 案例一: 使用IDA PRO+OllyDbg+PEview 追踪w ...

  7. ida安装包密码算法

    我的环境:mac,perl v5.18.4并不是5.20是可以跑出7.2和6.8的,但是7.0和其他的不行. #!/usr/bin/env perl # @_e = split //,"ab ...

  8. ICLR 2020| 最新NAS benchmark:0.1秒完成NAS算法搜索

    2020-01-19 16:37 专题:ICLR 2019 导语:ICLR论文解读~ 雷锋网AI科技评论按:本文对悉尼科技大学博士生董宣毅发表于 ICLR 2020 的录用Spotlight论文< ...

  9. LeetCode算法题0:分发糖果【贪心算法】

    文章目录 前言 一.题目 二.思路详解 三.搞点实际点儿的(C++实现) 1.略显粗糙的代码实现 2.稍显精致的代码实现 3.最终的代码实现 4.提交结果 总结 前言 本文记录自己在LeetCode上 ...

最新文章

  1. php后台守护进程+进程信号处理
  2. boost::multiprecision模块将使用 fixed_int 的算术结果与 GMP 结果进行比较相关的测试程序
  3. 深度学习(七)—— GAN
  4. 老司机实战Windows Server Docker:4 单节点Windows Docker服务器简单运维(下)
  5. 很多人不知道的中国高校“V9联盟”,另一领域的顶尖牛校!
  6. python期末大作业_大一期末考试很重要,考得好不仅有机会有钱拿,还有机会换专业...
  7. 字符串去重_文件数据去重示例
  8. iTween 动画类型
  9. python用字典统计单词出现次数_python - 如何使用字典理解来计算文档中每个单词的出现次数...
  10. 问题解决:error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1700”不匹配值“1800”
  11. 管脚自动分配_lattice器件管脚评估与功耗评估
  12. python3短信接口
  13. .NET发送邮件代码--測試通過
  14. 简单制作 macOS Sierra 正式版U盘USB启动安装盘方法教程 (全新安装 Mac 系统)
  15. 5.学城项目 支付宝支付
  16. 数据分析 第二章 1.数据清洗及特征处理
  17. 路由器 设置DNS 域名拦截 重定向
  18. 阿里巴巴食堂:看菜名我跪了~程序员:给我来个“油炸产品经理”
  19. pymysql模块安装后,import pymysql找不到?
  20. 狮场(苏宁)面试小结

热门文章

  1. 编写Eureka入门案例
  2. Spring Session实战3
  3. php面向对象项目,PHP的面向对象编程:开发大型PHP项目的方法(一)
  4. 优化 UI 应用启动时间的方法
  5. 200726C的数据传递方式
  6. 对于指针与malloc函数关系的研究,以及指针的赋值。
  7. 20155301实验三 免杀原理与实践
  8. Win8Metro(C#)数字图像处理--2.33图像非线性变换
  9. 惠普再“卖身”,软件业务卖给了这家鼻祖级公司
  10. 《UCD火花集2:有效的互联网产品设计 交互/信息设计 用户研究讨论》一2.3 交互设计师容易犯的错误:把自己禁锢在解决方案之中...