標誌暫存器代表某種狀態。在32位cpu中有32個不同的標誌暫存器,不過不用擔心,我們只關心其中的3個:zf、of、cf。在逆向工程中,你了解了標誌暫存器就能知道程式在這一步是否會跳轉,標誌暫存器就是乙個標誌,只能是0或者1,它們決定了是否要執行某個指令。
z-flag(零標誌):
zf是破解中用得最多的暫存器(通常情況下佔了90%),它可以設成0或者1。若上乙個運算結果為0,則其值為1,否則其值為0。(你可能會問為什麼『cmp』可以操作zf暫存器,這是因為該指令在做比較操作(等於、不等於),那什麼時候結果是0什麼時候是1呢?待會再說)
the o-flag(溢位標誌):
of暫存器在逆向工程中大概佔了4%,當上一步操作改變了某暫存器的最高有效位時,of暫存器會被設定成1。例如:eax的值為7ffffffff,如果你此時再給eax加1,of暫存器就會被設定成1,因為此時eax暫存器的最高有效位改變了(你可以使用電腦自帶計算器將這個16進製制轉化成2進製看看)。還有當上一步操作產生溢位時(即算術運算超出了有符號數的表示範圍),of暫存器也會被設定成1。
the c-flag(進製標誌):
進製暫存器的使用大概佔了1%,如果產生了溢位,就會被設定成1。例,假如某暫存器值為ffffffff,再加上1就會產生溢位,你可以用電腦自帶的計算器嘗試。
cmpcmp指令【比較】兩個值並且設定cf、of、zf標記的值
指令條件
標誌位狀態
ja*如果大於就跳轉(無符號)
cf=0 and zf=0
jae如果大於或等於就跳轉(無符號)
cf=0
jb*如果小於就跳轉(無符號)
cf=1
jbe如果小於或等於就跳轉(無符號)
cf=1orzf=1
jc如果cf被標記就了跳轉
cf=1
jcxz
如果cx等於0就跳轉
cx=0
je**
如果相等就跳轉
zf=1
jecxz
如果ecx等於0就跳轉
ecx=0
jg*如果大於就跳轉(有符號)
zf=0andsf=of(sf=signflag)
jge*
如果大於或等於就跳轉(有符號)
sf=of
jl*如果小於就跳轉(有符號)
sf!=of(!=isnot)
jle*
如果小於或等於就跳轉(有符號
zf=1andof!=of
jmp**
跳轉強制跳轉
jna如果不大於就跳轉(無符號)
cf=1orzf=1
jnae
如果不大於等於就跳轉(無符號)
cf=1
jnb如果不小於就跳轉(無符號)
cf=0
jnbe
如果不小於等於就跳轉(無符號)
cf=0andzf=0
jnc如果cf未被標記就跳轉
cf=0
jne**
如果不等於就跳轉
zf=0
jng如果不大於就跳轉(有符號)
zf=1orsf!=of
jnge
如果不大於等於就跳轉(有符號)
sf!=of
jnl如果不小於就跳轉(有符號)
sf=of
jnle
如果不小於等於就跳轉(有符號)
zf=0andsf=of
jno如果of未被標記就跳轉
of=0
jnp如果pf未被標記就跳轉
pf=0
jns如果sf未被標記就跳轉
sf=0
jnz如果不等於0就跳轉
zf=0
jo如果of被標記就跳轉
of=1
jp如果pf被標記就跳轉
pf=1
jpe如果是偶數就跳轉
pf=1
jpo如果是奇數就跳轉
pf=0
js如果sf被標記就跳轉
sf=1
jz如果等於0就跳轉
zf=1––
–and(邏輯與)
and運算對兩個數進行邏輯與運算。and指令會清空of,cf標記,設定zf標記。
mov eax,5678912
and eax,1000
結果eax=5678000,低3位被and清零
or (邏輯或)
or指令對兩個值進行邏輯或運算。這個指令會清空of、cf標記,設定zf標記
test(檢查標誌位)
這個指令99%都是用於」test eax,eax」,它執行與and相同的功能,但是並不儲存資料。如果eax=0就會標記zf,如果eax不是0,就會清空zf
xor(邏輯非)
xor指令對兩個數進行異或操作這個指令清空of、cf,但會標記zf
mov eax,5678912
xor eax,eax
結果eax=0,清楚操作值為零
lea(位址傳送)
lea可以看成和mov差不多的指令lea ,它本身的功能並沒有被太廣泛的使用,反而廣泛
lea eax,dword ptr [2*edx+ebx]
將[2*edx+ebx]的位址傳遞給eax OD教程(彙編基礎)
一 call有以下幾種方式 call 404000h 直接跳到函式或過程的位址 call eax 函式或過程位址存放在eax 執行乙個系統api windows 應用程式執行在ring3級別 包括我們的倚天劍 ollydbg 等級安排 但有時候需要ring0級別才能進行操作,那咋整?我們可以通過系統...
OD 彙編指令 記錄(1)
一.mov eax 0x12 1.mov 目標運算元 源運算元 作用把 源運算元拷貝到目標運算元 mov 語法 1.mov r m8 r8 r 代表通用暫存器 2.mov r m16 r16 m 代表記憶體 3.mov r m32 r32 imm 代表立即數 4.mov r8,r m8 r8代表8位...
OD入門基礎
je,jz 結果為零則跳轉 jne,jnz 結果不為零則跳轉 js 結果為負則跳轉 jns 結果不為負則跳轉 jp,jpe 結果中1的個數為偶數則跳轉 jnp,jnpe 結果為1的個數為奇數則跳轉 jo 結果溢位了則跳轉 jno 結果沒有溢位則跳轉 jb,jnae 小於則跳轉 無符號數 jnb,ja...