ARM處理器有兩種工作狀態ARM和Thumb(Jazelle此處先不考慮)。這兩種工作狀態和運行模式沒有任何關系。比如不論是ARM還是Thumb狀態的代碼都可以運行在用戶模式下。這兩種工作狀態之間最大的差異是指令集,ARM狀態的指令長度是32位的,Thumb狀態的指令長度是16位的(也可能為32位)。了解如何使用Thumb工作狀態對于編寫ARM平臺的漏洞利用是至關重要的。當我們編寫ARM shellcode時,需要使用16 bit的Thumb指令代替32 bit的ARM指令,從而避免在指令中出現’\0’截斷。容易引起混淆的是,不同的ARM版本,支持的Thumb指令集并不相同。在某些版本中,ARM引入了擴展的Thumb指令集(也就是Thumb-2),它支持32 bit指令以及條件執行。這在原本的Thumb指令中都是不受支持的。為了在Thumb狀態下支持條件執行,“it”指令被引入。然而,可能是為了簡化指令集,這個指令在后來的版本中被刪除了。我認為這種設計反而增加了兼容的復雜度。不過,當然我認為沒必要知道所有ARM版本的ARM/Thumb指令集變體,我建議你也不必在這上面浪費太多時間。你只需要知道目標設備的版本和該版本對Thumb指令有哪些特殊支持,然后調整你的代碼就好了。ARM Infocenter可以幫助你了解各個ARM版本的具體細節
標簽:
ARM
匯編指令
上傳時間:
2022-02-10
上傳用戶: