OLLYDBG知识
1.MUL DWORD PTR DS:[405000]解釋
MUL:MUL(無符號(hào)數(shù)的乘法)
有兩種乘法,第一個(gè)種是MUL,這種是無符號(hào)數(shù)乘法,只有一個(gè)操作數(shù),另一個(gè)操作數(shù)是EAX,結(jié)果存放到EDX:EAX中。
---- EDX:EAX是指結(jié)果存放在EDX:EAX中,如果需要得到結(jié)果,則由EDX連接到EAX而得。比如:計(jì)算后:結(jié)果是:1FFFFFFFA,由于EAX只能存放FFFFFFFA,那個(gè)1則存放在EDX中(00000001)。
dword 雙字 就是四個(gè)字節(jié)
ptr pointer縮寫 即指針
[]里的數(shù)據(jù)是一個(gè)偏移地址值,這個(gè)偏移地址與DS組合指向一個(gè)雙字型數(shù)據(jù)
如果不加[]就會(huì)報(bào)錯(cuò)
DS:CS:代碼段寄存bai器;DS:數(shù)據(jù)段寄存器;SS:堆棧段du寄存器。段寄存器DS指向數(shù)據(jù)段,ES指向附加段,在存取操作數(shù)時(shí),二者之一和一個(gè)偏移量合并就可得到存儲(chǔ)單元的物理地址。該偏移量可以是具體數(shù)值、符號(hào)地址和指針寄存器的值等之一,具體情況將由指令的尋址方式來決定。
ds:[]ds是段前綴 例如:ds:[bx]
偏移地址在bx中,段地址在ds中。
轉(zhuǎn)換時(shí),先將16位的段地址左移4位,相當(dāng)于乘以16或者16進(jìn)制的10H,再和偏移地址相加。–from - https://blog.csdn.net/thisispan/article/details/7685040
轉(zhuǎn)換公式為:
物理地址 = 段地址*10H + 偏移地址(H(hexadecimal):16進(jìn)制)
2.循環(huán)
—from 看雪學(xué)院翻譯的ollydbg
LOOPNZ, LOOPNE 重復(fù)循環(huán),直到零標(biāo)志位Z清0
這幾條指令同樣是循環(huán)指令,即重復(fù)循環(huán)體,直到計(jì)數(shù)器為0,每次循環(huán)將計(jì)數(shù)器的值遞減1。此外,LOOPZ,LOOPNZ指令還將檢查零標(biāo)志位Z是否為0。只有計(jì)數(shù)器的值和零標(biāo)志Z同時(shí)滿足條件時(shí)才循環(huán)。
3 . 尋址方式
看雪學(xué)院翻譯的ollydbg
直接尋址
這是最簡單的一種尋址方式-該指令的操作數(shù)中包含一個(gè)具體的地址。
例如:
MOV DWORD PTR [00513450], ECX
MOV AX, WORD PTR [00510A25]
MOV AL, BYTE PTR [00402811]
CALL 452200
JMP 421000
不需要進(jìn)行任何有關(guān)地址解析的計(jì)算,地址的值是純數(shù)字。
間接尋址
MOV DWORD PTR[EAX], ECX
CALL EAX
JMP [EBX + 4]
要想在指令執(zhí)行之前看到真實(shí)地址,需要在該指令上下斷點(diǎn),斷下來以后查看寄存器的值或者查看解釋窗口中的提示信息。
許多程序使用間接尋址來完成一些復(fù)雜的操作,因此剛開始分析調(diào)試的時(shí)候真實(shí)地址并不會(huì)顯示出來。直到我們執(zhí)行到這條指令的時(shí)候,查看相應(yīng)寄存器的值才能夠直到真實(shí)的地址。
現(xiàn)在我們再次用OD加載Cruehead’a的CrackMe。
這里我們來看一看間接尋址的例子:PUSH [EBP + 8]
因?yàn)楫?dāng)前我們處于入口點(diǎn),在執(zhí)行PUSH [EBP + 8]指令之前我們并不能預(yù)先直到EBP寄存器的值,我們在該指令處(4010E9)按下F2鍵,設(shè)置一個(gè)斷點(diǎn)。
然后按F9鍵(運(yùn)行)-CrackMe運(yùn)行一會(huì)兒就會(huì)斷在我們設(shè)置的斷點(diǎn)處。
解釋窗口中提示EBP+8=12FFF8。在我的機(jī)器上面此時(shí)EBP為12FFF0,所以EBP+8=12FFF8。
現(xiàn)在讓我們在數(shù)據(jù)窗口中看看EBP+8指向內(nèi)存單元的值,在數(shù)據(jù)窗口中單擊鼠標(biāo)右鍵選擇-Go to-Expression,輸入EBP+8
使用間接尋址的指令,只能在執(zhí)行這條指令的時(shí)候獲取地址當(dāng)前的值。
4 . 快捷鍵
5 .XOR EAX,ECX會(huì)把結(jié)果存到第一個(gè)操作數(shù)中,CMP不會(huì)。
6 .反調(diào)試
總結(jié)
- 上一篇: webstorm导致CPU占用率高
- 下一篇: 校招八股:C/C++开发工程师常见笔试、