逆向工程 0x02

2021-07-09 03:18:23 字數 1375 閱讀 9384

常用的彙編指令

指令示例

含義說明

movmov eax,ecx

eax=ecx

將ecx的值存入eax

addadd eax,ecx

eax+=ecx

將eax的值加上ecx的值

subsub eax,ecx

eax-=ecx

將eax的值減去ecx的值

incinc eax

eax++

將eax的值加1

decdec eax

eax–

將eax的值減1

lealea eax,[ecx+4]

eax=ecx+4

將ecx+4的值出去eax

cmpcmp eax,ecx

if(eax==ecx) zf=1

else zf=0

對兩個值進行比較根據比較的結果設定標誌位

若eax於ecx相同,zf=1

若eax於ecx不相同,zf=0

test

test eax,eax

if(eax==0) zf=1

else zf=0

將值與0比較根據比較結果設定標誌位

若eax等於0,zf=1

若eax不等於0,則zf=0

je(jz)

je 04001000

if(zf==1)

goto 04001000

若zf=1,則跳轉到04001000

jne(jnz)

jne 04001000

if(zf==0)

goto 04001000

若zf=0,則跳轉到04001000

jmpjmp 04001000

goto 04001000

無條件跳轉到04001000

call

call lstrcmpw

呼叫lstrcmpw

push

push 00000001

壓棧pop

pop eax

出棧並將獲取的值存入eax暫存器

notice:

只要看到帶有兩個相同暫存器的test指令,一般就是條件分支,可以簡單的理解成若暫存器值為0,則zf=1;

將jnz和test指令結合起來就是:

test eax,eax

jnz 04001000

call指令是用來呼叫子程式,返回值一般存放在eax暫存器中。

子程式的引數一般存放在棧中,用push指令壓入。引數是從後往前的順序壓入。

學習編寫彙編碼我之前有寫過專門的博文來講解具體的操作和用到工具。

參見:

逆向 1 彙編 0x02 原碼補碼反碼

0x00 有符號數 負數 最高位為1,代表負數 除去最高位剩餘位以無符號數解析,符號為負 原碼 計算機以補碼儲存有符號數 0x01 原碼 最高位為符號位,其餘位為數值 0 001 0011 0x13 19 1 001 0011 0x13 19 0x02 反碼 正數的反碼是原碼 負數反碼 最高位不變,...

招聘程式設計題0x02

python3 coding utf 8 在4x4的棋盤上擺滿了黑白棋子,黑白兩色的位置和數目隨機其中左上角座標為 1,1 右下角座標為 4,4 現在依次有一些翻轉操作,要對一些給定支點座標為中心的上下左右四個棋子的顏色進行翻轉,請計算出翻轉後的棋盤顏色。給定兩個陣列a和f,分別為初始棋盤和翻轉位置...

物聯網開發小計 0x02

自用的的家庭物聯網開發筆記 環境部署好以後就是安裝homeassistant,這裡直接用pip安裝,安裝的過程中會各種error,開 v會發現2個錯誤,乙個是setuptools的 egg info錯誤 另乙個是wheel的錯誤,對這幾個包公升級即可正常安裝了。用putty或者其他的ssh工具連上路...