【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )
文章目錄
- 一、push / pop 入棧 / 出棧 指令
- 二、ret / retn 函數(shù)調(diào)用返回指令
- 三、set 設(shè)置目標(biāo)值指令
- 總結(jié)
一、push / pop 入棧 / 出棧 指令
push / pop 入棧 / 出棧 指令 , 可以有如下選項(xiàng) :
-
f : 表示 161616 位標(biāo)志位 , 下面列舉幾個(gè)常用的標(biāo)志位 ;
- C 對(duì)應(yīng) 進(jìn)位 位 , 此處指的是減法操作是否有借位 ;
- P 對(duì)應(yīng) 奇偶 位 , 運(yùn)算結(jié)果 的 奇偶 , 檢測(cè)結(jié)果最后一個(gè)位是 000 還是 111 ;
- A 對(duì)應(yīng) 輔助進(jìn)位 位 , 323232 位的整型中 , 低 161616 位是否發(fā)生了 借位 或 進(jìn)位 ;
- Z 對(duì)應(yīng) 零標(biāo)志 , 如果 減法操作 最后的結(jié)果是 000 , 該 零標(biāo)志位 會(huì)被設(shè)置成 111 , 如果 減法操作 結(jié)果不為 000 , 該 零標(biāo)志位 會(huì)被設(shè)置成 000 ;
- O 對(duì)應(yīng) 溢出標(biāo)志 , 減法操作是否會(huì)導(dǎo)致溢出 , 負(fù)數(shù) - 負(fù)數(shù) 會(huì)出現(xiàn)溢出 ;
- S 對(duì)應(yīng) 符號(hào)標(biāo)志位 , 計(jì)算結(jié)果如果是負(fù)數(shù) , 該標(biāo)志位設(shè)置成 000 , 計(jì)算結(jié)果如果是正數(shù) , 該標(biāo)志位設(shè)置成 111 ;
-
fd : 表示 323232 位標(biāo)志位 ;
-
fq : 表示 646464 位標(biāo)志位 ;
-
a : 表示 161616 位的通用寄存器 ;
-
ad : 表示 323232 位的通用寄存器 ;
二、ret / retn 函數(shù)調(diào)用返回指令
ret / retn 是 函數(shù)調(diào)用返回指令 ;
這 222 個(gè)指令的機(jī)器碼都是相同的 ;
三、set 設(shè)置目標(biāo)值指令
set 指令 用于 設(shè)置 目標(biāo)值為 000 或 111 ;
set a eaxeax 是目標(biāo)值 , 設(shè)置成 000 或 111 ;
上述代碼中 a 表示無符號(hào)大于 , 如果 a 條件達(dá)成 , eax 設(shè)置為 111 , 如果不滿足 , 則設(shè)置為 000 ;
-
a : above , 無符號(hào) 大于 跳轉(zhuǎn) ;
-
b : below , 嗎無符號(hào) 小于 跳轉(zhuǎn) ;
-
g : great , 有符號(hào) 大于 跳轉(zhuǎn) ;
-
l : less , 有符號(hào) 小于 跳轉(zhuǎn) ;
-
e : equal , 等于 ;
-
n : negative , 反條件 ;
-
o : 對(duì)應(yīng) 溢出標(biāo)志 , 減法操作是否會(huì)導(dǎo)致溢出 ; ( 與運(yùn)算不存在進(jìn)位 , 沒有溢出 )
-
p : 對(duì)應(yīng) 奇偶 位 , 運(yùn)算結(jié)果 的 奇偶 , 檢測(cè)結(jié)果最后一個(gè)位是 000 還是 111 ;
-
s : 對(duì)應(yīng) 符號(hào)標(biāo)志位 , 計(jì)算結(jié)果如果是負(fù)數(shù) , 該標(biāo)志位設(shè)置成 000 , 計(jì)算結(jié)果如果是正數(shù) , 該標(biāo)志位設(shè)置成 111 ;
-
z : 對(duì)應(yīng) 零標(biāo)志 , 如果 與操作 最后的結(jié)果是 000 , 該 零標(biāo)志位 會(huì)被設(shè)置成 111 , 如果 與操作 結(jié)果不為 000 , 該 零標(biāo)志位 會(huì)被設(shè)置成 000 ;
總結(jié)
align 字節(jié)對(duì)齊 , db 聲明字符 / 字符串 , nop 空指令
cmp 比較 , test 比較
call 子函數(shù)調(diào)用指令 , jmp 跳轉(zhuǎn)指令 ( 可選參數(shù) a , b , c , g , l , o , p , s , z , e , n)
lea 加載指令 , lds , les , lfs , lgs , lss , mov 數(shù)據(jù)傳送指令
push , pop , pushf , popf , pushd , popd , pushad , popad , pusha , popa
ret , retn , set
add , sub , mul , div
xor , not , shl , shr , sal , sar , rol , ror , rcl , rcr
總結(jié)
以上是生活随笔為你收集整理的【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 插件化】DroidPl
- 下一篇: 【Android 逆向】x86 汇编 (