逆向与汇编的一些笔记
寄存器
EAX:累加寄存器
EBX:基址寄存器
ECX:計(jì)數(shù)寄存器
EDX:數(shù)據(jù)寄存器
ESI:來(lái)源寄存器
EDI:目標(biāo)寄存器
EBP:基址指針寄存器
ESP:堆棧指針寄存器
EIP:指令指針寄存器
?
條件跳轉(zhuǎn)指令
ja? CF=0 and ZF=0
jab CF=0
jb?? CF=1
jbe? CF=1 of ZF =1
jcxz? CX=0
je???? ZF=1
jecxz?? ECX=0
jg?? ZF=0? and??? SF=OF
jge? SF=OF
jl? SF!=OF
jle? ZF=1?? or SF!=OF
jmp? 無(wú)條件跳轉(zhuǎn)
jna? CF=1 or? ZF=1
jnae? CF=1
jnb?? CF=0
jnbe? CF=0 and ZF=0
jnc???? CF=0
jne???? ZF=0
jng???? ZF=1 or SF!=OF
jnge?? SF!=OF
jnl?????? SF=OF
jnle???? ZF=0 and SF=OF
jno????? OF=0
jnp????? PF=0
jns??????SF=0
jnz????? ZF=0
jo?????? OF=1
jp?????? PF=1
jpe??? PF=1
jpo???? PF=0
js????? SF=1
jz????? ZF=1
?
標(biāo)志位
Z標(biāo)志位(0標(biāo)志),這個(gè)標(biāo)志位是最常用的,運(yùn)算結(jié)果為0時(shí)候,Z標(biāo)志位置1,否則置0。
O標(biāo)志位(溢出標(biāo)志),在運(yùn)行過(guò)程中,如操作數(shù)超出了機(jī)器能表示的范圍則稱為溢出,此時(shí)OF位置1,否則置0。
C標(biāo)志位(進(jìn)位標(biāo)志),記錄運(yùn)算時(shí)從最高有效位產(chǎn)生的進(jìn)位值。例如執(zhí)行加法指令時(shí),最高有效位有進(jìn)位時(shí)置1,否則置0。
?
cmp指令大概有以下幾種格式:
cmp eax, ebx ;如果相等,Z標(biāo)志位置1,否則0.
cmp eax, [404000] ;將eax和404000地址處的dword型數(shù)據(jù)相比較并同上置位。
cmp [404000], eax ;同上。
?
test指令
test eax,eax? ;如果eax的值為0,則Z標(biāo)志位置1
?
邏輯運(yùn)算
and eax,ebx?
or eax,ebx
xor eax,ebx
not eax
?
CALL指令
call XXX; 等于 push eip; 然后 jmp XXX;
call有以下幾點(diǎn)調(diào)用方式?
call 404000h ;直接跳到函數(shù)或過(guò)程的地址
call eax ;函數(shù)或過(guò)程地址存放在eax
call dword ptr [eax]
call dword ptr [eax+5]
call dword ptr [<&API>] ;執(zhí)行一個(gè)系統(tǒng)API
?
PE文件格式
PE文件結(jié)構(gòu):
DOS header
DOS stub
PE File Header
Image Optional Header
Section Table
Data Directories
Sections
?
GetModuleHandleA這個(gè)API函數(shù)用于獲取程序的ImageBase(基址)
VA(VirtualAddress,虛擬地址)
RVA(RelativeVirtualAddress,相對(duì)虛擬地址)
EP(EntryPoint,程序入口點(diǎn))
?
?
軟件斷點(diǎn)
設(shè)置該斷點(diǎn)的原理是在斷點(diǎn)處重寫代碼,插入一個(gè)int3中斷指令,當(dāng)CPU執(zhí)行到int3指令的時(shí)候,OD就可以獲得控制權(quán)。軟件斷點(diǎn)只能在OD的CPU界面下,在數(shù)據(jù)段它下不了,在一條指令的中間它也下不了。?
硬件斷點(diǎn):
這個(gè)原理跟軟件斷點(diǎn)不同,硬件斷點(diǎn)的可行性依賴于CPU的物理支持。CPU有四個(gè)調(diào)試寄存器。如果我們想下在windows的動(dòng)態(tài)鏈接庫(kù)里下斷點(diǎn),需要用到硬件斷點(diǎn),因?yàn)橛密浖帱c(diǎn)下在dll文件中是不會(huì)保存的,重啟程序后將丟失斷點(diǎn)。
?
總結(jié)
以上是生活随笔為你收集整理的逆向与汇编的一些笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OllyDbg的一些快捷键
- 下一篇: exe的dll加载过程