od基礎彙編

2021-09-11 19:08:58 字數 2611 閱讀 7678

標誌暫存器代表某種狀態。在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...