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