0.IDA-基本的反汇编算法
生活随笔
收集整理的這篇文章主要介紹了
0.IDA-基本的反汇编算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.線性掃描
原理: 一條指令結束,另一條指令開始 關鍵: 確定起始位置?流程: 從起始,逐條反匯編指令,直到完成整個代碼段
優點: 可覆蓋程序的所有代碼段 缺陷: 如果代碼段中混有數據!
gdb windbg objdump均采用線性掃描
2.遞歸下降
原理:
根據一條指令是否被另一條指令引用來決定是否對其進行反匯編
順序流指令
直接解析它后面的下一條指令,如MOV、PUSH、POP
條件分支指令
解析它的所有條件路徑,如JNZ
無條件分支指令
反匯編器會嘗試定位到跳轉的目標,但有可能失敗(如JMP EAX,EAX在靜態環境下無法確認)
函數調用指令
和無條件分支指令相似,如CALL EAX
一般默認會直接反匯編CALL指令后,但如果函數中有意竄改返回地址,那就坑了,如下例子:
[cpp]?view plaincopy 返回指令 由于RET返回的地址實際是從棧中取得的,但反匯編器不可能訪問到棧,所以就會終止
優點: 可以區別代碼和數據
IDA使用的是遞歸遍歷反匯編算法
總結
以上是生活随笔為你收集整理的0.IDA-基本的反汇编算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OD-困难重重的追踪消息断点
- 下一篇: 1.IDA-基本操作(改变Image B