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