ARM處理器有兩種工作狀態(tài)ARM和Thumb(Jazelle此處先不考慮)。這兩種工作狀態(tài)和運(yùn)行模式?jīng)]有任何關(guān)系。比如不論是ARM還是Thumb狀態(tài)的代碼都可以運(yùn)行在用戶模式下。這兩種工作狀態(tài)之間最大的差異是指令集,ARM狀態(tài)的指令長(zhǎng)度是32位的,Thumb狀態(tài)的指令長(zhǎng)度是16位的(也可能為32位)。了解如何使用Thumb工作狀態(tài)對(duì)于編寫ARM平臺(tái)的漏洞利用是至關(guān)重要的。當(dāng)我們編寫ARM shellcode時(shí),需要使用16 bit的Thumb指令代替32 bit的ARM指令,從而避免在指令中出現(xiàn)’\0’截?cái)唷H菀滓鸹煜氖牵煌腁RM版本,支持的Thumb指令集并不相同。在某些版本中,ARM引入了擴(kuò)展的Thumb指令集(也就是Thumb-2),它支持32 bit指令以及條件執(zhí)行。這在原本的Thumb指令中都是不受支持的。為了在Thumb狀態(tài)下支持條件執(zhí)行,“it”指令被引入。然而,可能是為了簡(jiǎn)化指令集,這個(gè)指令在后來(lái)的版本中被刪除了。我認(rèn)為這種設(shè)計(jì)反而增加了兼容的復(fù)雜度。不過(guò),當(dāng)然我認(rèn)為沒(méi)必要知道所有ARM版本的ARM/Thumb指令集變體,我建議你也不必在這上面浪費(fèi)太多時(shí)間。你只需要知道目標(biāo)設(shè)備的版本和該版本對(duì)Thumb指令有哪些特殊支持,然后調(diào)整你的代碼就好了。ARM Infocenter可以幫助你了解各個(gè)ARM版本的具體細(xì)節(jié)
標(biāo)簽:
ARM
匯編指令
上傳時(shí)間:
2022-02-10
上傳用戶: