OD教程(汇编基础)
一、call有以下幾種方式:
call 404000h ;直接跳到函數或過程的地址
call eax ;函數或過程地址存放在eax
call dword ptr [eax]
call dword prt[eax
]
call dword ptr [eax+5]
call dword prt[eax+5]
calldword ptr [<&API>] ;執行一個系統API
二、關于系統API
Windows應用程序運行在Ring3級別(包括我們的倚天劍:OllyDBG)
windows等級安排
但有時候需要Ring0級別才能進行操作,那咋整?
我們可以通過系統為我們搭建的橋梁:API函數,我們也稱之為系統提供給我們的接口。
?
因為系統只信任自己提供的函數,所以我們要通過API才能實現對內核的操作。
你可以這么想,假如小甲魚送給你一輛法拉利跑車,恩,你沒聽錯,是假如,不是真的!那你要怎么來駕駛她?
?
沒錯,要通過踩油門來加速,要通過打方向盤來轉彎……而油門,方向盤
就是所謂的接口,對于法拉利來說,它們就是API函數。
?
三、關于mov指令
mov指令格式:mov dest, src
這是一個很容易理解的指令,mov指令將src的內容拷貝到dest,mov指令總共有以下幾種擴展:
movs/movsb/movsw/movsdedi,esi:這些變體按串/字節/字/雙字為單位將esi寄存器指向的數據復制到edi寄存器指向的空間。
movsx符號位擴展,byte->word,word->dword (擴展后高位全用符號位填充),然后實現mov。
movzx零擴展,byte->word,word->dword(擴展后高位全用0填充),然后實現mov。
?
四、關于cmp指令
cmp指令格式:cmp dest, src
cmp指令比較dest和src兩個操作數,并通過比較結果設置C/?O/Z標志位。
cmp指令大概有以下幾種格式:
cmpeax, ebx ;如果相等,Z標志位置1,否則0.
cmpeax, [404000] ;將eax和404000地址處的dword型數據相比較并同上置位。
cmp[404000], eax ;同上。
?
五、標志位
對于這個概念,建議魚油以關注蒼井空老師的熱情去關注它,因為它在破解中起到的作用是至關重要的。
事實上所有的標志位歸并與一個32位的標志位寄存器,也就是說有32個不同的標志位。
每個標志位有兩個屬性:置1或置0,就相當于我們平時說的OK或不OK,OK就買魚C優盤支持小甲魚,不OK就看著小甲魚餓死街頭醬紫啦~
哈哈,大家可能更加關注的是32個標志位都要記住?那不折騰死人才怪!
在逆向中,你真正需要關心的標志位只有三個,也就是cmp指令能修改的那三個:Z/O/C。
Z標志位(0標志),這個標志位是最常用的,運算結果為0時候,Z標志位置1,否則置0。
O標志位(溢出標志),在運行過程中,如操作數超出了機器能表示的范圍則稱為溢出,此時OF位置1,否則置0。
C標志位(進位標志),記錄運算時從最高有效位產生的進位值。例如執行加法指令時,最高有效位有進位時置1,否則置0。
六、邏輯運算
邏輯運算
?
七、關于test指令
test指令格式:test dest, src
這個指令和and指令一樣,對兩個操作數進行按位的‘與’運算,唯一不同之處是不將‘與’的結果保存到dest。
即本指令對兩個操作數的內容均不進行修改,僅是在邏輯與操作后,對標志位重新置位。
小甲魚很負責任地告訴大家該指令的實戰形態百分之九十九是醬紫:test eax, eax(如果eax的值為0,則Z標志位置1)
八、關于條件跳轉指令
條件跳轉指令,就是根據各種不同標志位的條件判斷是否成立,條件成立則跳轉。
九、patch
patch也就是我們平時所說的補丁。
所謂給程序打補丁就是我們對程序破解所進行的修改,就是說像我們衣服破了,如果沒有打補丁,就會走光的意思。
OllyDBG的“/”可以查看所有打過的補丁。
?
?
總結
以上是生活随笔為你收集整理的OD教程(汇编基础)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高数下_知识总结
- 下一篇: MAC m1芯片 Ubuntn配置过程