我想爲註釋練習的反彙編代碼塊。這是我迄今所做的:ARM反彙編器輸出:當有兩個參數而不是三個時
00000190 <mystery>:
190: 2300 movs r3, #0 // move address 190 (offset 0) into r3 ?
192: e004 b.n 19e <mystery+0xe> // if 19e then branch to mystery
194: f010 0f01 tst.w r0, #1 ; 0x1 // update flags to 1 in status register
198: bf18 it ne // if 198 not equal to ??? then ???
19a: 3301 addne r3, #1 // add to r3 if not equal to 19a offset 1?
19c: 1040 asrs r0, r0, #1 // shift r0 right one spot (leave it in r0)
19e: 2800 cmp r0, #0 // compare contents of r0 against 0 ?
1a0: d1f8 bne.n 194 <mystery+0x4> // branch to 194 if not equal to something at line 194?
1a2: 4618 mov r0, r3 // move r3 wholecloth into r0
1a4: 4770 bx lr // branch(return from the mystery function)
1a6: bf00 nop // No operation
所以,我的意見是相當不成熟,並且很可能是大規模不正確,但最重要的是我真的不明白如在190或19A說明的意思。只有兩個參數而不是三個,所以這些工作是如何工作的?
以作爲一個例子
19a: 3301 addne r3, #1
我的這種解釋至今是:如果不等於X,然後加y以R3?什麼是X和Y?我應該使用前一行的結果嗎?如果是這樣,那麼哪個(標準三的)論點取代了?
Blah!
我願意接受我不知道我在做什麼,並且完全誤解了所有的東西。
請發出幫助!
好的,這是非常有用的 - 我怎麼知道一個條件分支已經結束? – eggonlegs 2011-06-10 13:48:18
我不確定你所說的「結束」是什麼意思......條件分支(就像bne)就是那條指令,它要麼支持分支。我想你可能會談論IT指令 - 在這種情況下,它會影響到我之後有多少條指令(例如,ITTE或ITEE會影響三條指令)。無論如何,大多數(所有?)反彙編程序都會使用條件後綴標記受影響的指令,因此通常不需要計算字母數,只需查看後綴即可。 – 2011-06-10 14:03:02
我剛開始閱讀這個。你解釋得很好。非常感謝 – eggonlegs 2011-06-28 06:50:17