【Android 逆向】x86 汇编 ( align | db | dw | dd | nop | 伪指令 )
文章目錄
- 一、align 字節(jié)對(duì)齊指令
- 二、db / dw / dd 指令
- 三、nop 指令
- 總結(jié)
一、align 字節(jié)對(duì)齊指令
align 字節(jié)對(duì)齊 ; 默認(rèn)情況下是 161616 字節(jié)對(duì)齊 ; 該指令是偽指令 , 沒(méi)有機(jī)器碼與之對(duì)應(yīng) ;
align 16h內(nèi)存中是分頁(yè)的 , 如果要記錄每一塊內(nèi)存的使用狀況 , 需要占用很大的內(nèi)存空間 , 為了方便系統(tǒng)中內(nèi)存的使用與記錄 , 首先將操作系統(tǒng)分頁(yè) , 只需要記錄每個(gè)分頁(yè)的使用情況即可 , 每個(gè)分頁(yè)只有 使用 / 沒(méi)有使用 兩種狀態(tài) ;
如果有 888 個(gè)分頁(yè) , 只需要有 888 位 , 111 字節(jié) , 就可以記錄 888 個(gè)分頁(yè)中 , 哪塊內(nèi)存使用了 , 哪塊內(nèi)存沒(méi)有使用 ;
實(shí)際中 , 每個(gè)分頁(yè)有 444 K , 以分頁(yè)為單位 , 將內(nèi)存分配給各個(gè)進(jìn)程 ;
分頁(yè)內(nèi)部的數(shù)據(jù) , 如果是亂的 , 如 第 000 字節(jié)有數(shù)據(jù) , 然后空了 222 字節(jié) , 第 333 字節(jié)才有下一個(gè)數(shù)據(jù) , 這樣內(nèi)存的使用效率很低 , 這里就需要引入對(duì)齊操作 ;
將分頁(yè)中的數(shù)據(jù)按照 444 字節(jié)對(duì)齊 , CPU 如果讀取內(nèi)存中的數(shù)據(jù) , 可以直接讀取數(shù)據(jù) , 加載內(nèi)存數(shù)據(jù)到高速緩存中 ; 如果沒(méi)有對(duì)齊 , 還要進(jìn)行地址操作 , 從間隔的內(nèi)存中獲取數(shù)據(jù) ;
如果設(shè)置了 161616 字節(jié)對(duì)齊 , 數(shù)據(jù)只有 151515 字節(jié) , 那么在數(shù)據(jù)后會(huì)空出一個(gè)字節(jié) ;
二、db / dw / dd 指令
db 指令 , 用于聲明 字符 / 字符串 常量 ;
# 聲明字符 db 'a'# 聲明字符串 db 'a', 'b', 'c'dw 指令 , 用于聲明 222 字節(jié)短整型 ;
dw 0x1234dd 指令 , 用于聲明 444 字節(jié)長(zhǎng)整型 ;
dd 0x12345678上述 db , dw , dd 指令 , 都是偽指令 , 沒(méi)有機(jī)器碼與之對(duì)應(yīng) ;
三、nop 指令
nop 指令 是 空指令 , 沒(méi)有參數(shù) ; 該指令的作用是不做任何操作 ;
x86 匯編中 , nop 指令有對(duì)應(yīng)的機(jī)器碼 0x90 與之對(duì)應(yīng) ;
總結(jié)
align 字節(jié)對(duì)齊 , db 聲明字符 / 字符串 , nop 空指令
cmp 比較 , test
call 調(diào)用 , jmp 跳轉(zhuǎn) (a , b , c , g , l , o , p , s , z , e , n)
lea , lds , les , lfs , lgs , lss , mov 移動(dòng)
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 汇编 ( align | db | dw | dd | nop | 伪指令 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Android 逆向】ARM CPU
- 下一篇: 【错误记录】Android 分区存储下的