2012-06-20 43 views
1

我正在寫/(使用binutils)一段代碼來手動拆卸thumb2(16位和32位)指令。 我面臨一個區分真正的ARM指令和數據部分的問題。如何在拆卸過程中分離ARM指令和數據

最大的問題是指令不是字對齊的。 所以當我嘗試讀取32位指令時,它多次與下一條指令實際重疊。

請任何幫助。

感謝, VJ

回答

0

ARM指令總是字對齊。大拇指總是對齊。 thumb2是可變字長。而且你不能像固定字長一樣反彙編可變字長。要反彙編可變字長指令集,您不能簡單地通過對齊地址和反彙編的內存。在某種形式下,您必須按執行順序遍歷數據以查找每條指令的起始地址,然後從該列表中拆卸。

0

如果您還可以讀取符號表,GCC將會留下符號$ a $ t $ d,指示您應該在哪個地址切換如何解釋字節:Arm,Thumb和Data。

例如,這是objdump知道如何顯示文字池的內容,但不嘗試將它們映射回指令,儘管a .text部分中的相鄰函數之間存在。