在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]
在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]
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系列的一部分,但不同的指令集或模式。
花了一段時間來弄清楚這一點,但你絕對指出我在正確的方向。謝謝! – user700048
我應該重寫這個,對不起,花了這麼長時間纔得到答案。我確實想強調,雖然你曾問過ARM,但應該提到thumb2,因爲ARM是核心設計者,但是有三種流行的指令集,還有一些流行的指令集或者不流行或者不支持(我正在考慮jazelle和少數浮點指令集,TI dsp是否需要添加到供應商用例中)。無論如何,對於這篇長文章感到抱歉,但最後我們到了那裏。 –
你如何配置IDA Pro?只要快速瀏覽一下ARM ARM的32位ARM指令集,就可以指示(來自操作碼位24-21)這不是ARM SUB指令(應該是0010)。你使用的是Thumb還是Thumb2? – Dan