2011-08-05 43 views
2

在IDA Pro中,我看到下面列出的ARM ASM。 IDA使用哪些位來獲得7200?如何從ARM ASM位提取值?

A3 F5 E1 53 SUB.W R3,R3#7200

爲了方便的值是二進制如下

7200 = 0x1c20 = 0001 1100 0010 0000

0xA3F5E153 = 1010 0011 1111 0101 1110 0001 0101 0011

編輯:在IDA選擇中加載文件。 Mach-O文件(DYLIB)ARMv7 [macho.lhc]

+0

你如何配置IDA Pro?只要快速瀏覽一下ARM ARM的32位ARM指令集,就可以指示(來自操作碼位24-21)這不是ARM SUB指令(應該是0010)。你使用的是Thumb還是Thumb2? – Dan

回答

2

ARM ARM(ARM體系結構參考手冊)是一個很好的資源,尤其適用於ARM和Thumb指令編碼。對於thumb2,雖然查找ARMv7-M TRM(技術參考手冊),但都是免費下載。

(我知道我用0x7200十六進制開始這不是7200十進制,這是好的,這一切都結束了)。

子r3,r3,#0x7200編碼如下(對於ARM)。

e2433c72 sub r3,r3,#29184; 0x7200

對E表示總是執行

2的上部3個比特指示數據處理即時沒有其它固定位 的4的兩個和高3位的下位是0010,這意味着子。 4的較低位是s位,意思是更新標誌(如果該位被設置,則是一條子指令)。接下來的兩個半字節3和3是接下來的4個字節r3的兩個實例,c是旋轉字段,而低8位是直接的。

移位器的操作數是immed_8 rotate_right(rotate_immed * 2)這樣就會是 0x72向右旋轉(24位),這與旋轉左邊的32-24位相同,這樣就會使立即的0x7200。

對於的Thumb2(這是其中SUB.W來自編碼如下:

f5a3 43e4 SUB.W R3,R3,#29184; 0x7200

T3編碼

0xF1A00000與或者沒有一些位是SUB.W rd,rd,#const的基線編碼(具有12位立即數,T4也具有12位IMED)

0x5中的0x4位是i位,因此我們需要知道,這個位沒有設置,它是一個子而不是子0x .... 4 ...半字節是imm3字段,低8位是使用手勢符號的imm8字段,我們的立即數是1:100:11100100

取這些位的前五位, I,imm3和上部的imm8位11001

這意味着取位圖案11100100和移位它右1001位

......

0000 0000 0111 0010 0 .... ..

和常數

0x00720000它是關閉的256,都明白這一點

嗯,我是做0x7200你正在做的十進制7200你提到這是0x1C20

所以看着你的工具告訴你的工具是告訴你

A3 F5 E1 53

我們知道我們需要一個0xF5A3所以也許牛逼他的另一部分也被交換了。

0xF5A353E1

哪個是你,我會得到什麼:

f5a3 53e1 SUB.W R3,R3,#7200; 0x1c20

相同T3編碼

0xF5A3裝置SUB.W東西,R3,一些與I位設置 0x53E1裝置SUB.W R3,R3,東西和const爲 1:101:11100001

高5位11011 這意味着移11100001右0b1011位這是一個11

0x001C2000

如果你足夠老知道宋飛這個落入亞達,亞達類別。
armv7-m TRM的A5.3.2(用拇指指令修改的立即數)。

01010它們顯示爲填充了兩位(在這種情況下,這些五位mnopq將第二個位移出mopq作爲移位量或0b0010)。

,並且它們具有...其他的東西,內容十分重要,然後

11111變爲移位/墊23個比特 11110是墊22 11101是墊21,但在之間的區域是不是線性的,有一些神奇的存在 如果我們繼續工作落後 11100是墊20, 11011墊19,

而這就是我們正在尋找的19 1前的墊低7 immed8位。

0x00001C20

所以的Thumb2 12位常數編碼是有點痛苦跟隨,大量有趣的常量,你可以優化的。 imm3的高位被設置的這個特定位置會留下4位或16個模式/值。但是我們可能需要填充24位數據,我們不能到達那裏。顯然,如果i位是零,那麼你從頂部向下放置,如果i位置位,則從中間點放置它看起來像。

所以看看armv7 trm中的SUB指令。用你正在嘗試做的事情編碼t3行。該描述表示拇指移位值爲i:imm3:imm8,將這些位 移至同一手冊的第a.5節,並查看錶a5-1,T3編碼將其稱爲const而不是imm12,imm12編碼看起來像在那個a5-1表之後是僞代碼。

另請注意,您沒有使用ARM指令,您正在查看thumb2指令。是的,是ARM系列的一部分,但不同的指令集或模式。

+0

花了一段時間來弄清楚這一點,但你絕對指出我在正確的方向。謝謝! – user700048

+0

我應該重寫這個,對不起,花了這麼長時間纔得到答案。我確實想強調,雖然你曾問過ARM,但應該提到thumb2,因爲ARM是核心設計者,但是有三種流行的指令集,還有一些流行的指令集或者不流行或者不支持(我正在考慮jazelle和少數浮點指令集,TI dsp是否需要添加到供應商用例中)。無論如何,對於這篇長文章感到抱歉,但最後我們到了那裏。 –