2016-01-25 87 views
-1

首先,對不起,如果我的英語不好,這不是我的自然語言。我在哪裏可以找到memcmp的輸入值(在ARM assembly for reverse engineering中)?

我還沒有逆向工程的經驗。所以,我很困惑我在大學裏關於這個話題的第一個任務。

任務是找到一個二進制密碼。該程序要求用戶輸入,將其轉換並將該輸入與硬編碼值(我不知道它的長度)進行比較。我試圖找到這個價值。

我敢肯定,我發現memcmp命令在哪裏比較值。我知道memcmp得到這些值作爲輸入參數,但我不知道從哪裏(堆棧或明確寄存器...)

下面是一段代碼它得到對memcmp前:

0x10a84 movw r3, #3472  ; 0xd90                               
0x10a88 movt r3, #2 
0x10a8c ldr r1, [r3] 
0x10a90 ldr r3, [r11, #-16] 
0x10a94 lsl r3, r3, #2 
0x10a98 mov r2, r3 
0x10a9c ldr r0, [r11, #-20] ; 0xffffffec 
0x10aa0 bl  0x10540 <[email protected]> 
0x10aa4 mov r3, r0 
0x10aa8 cmp r3, #0 
0x10aac bne 0x10ac0 

我非常感謝任何幫助。

+1

您應該查閱相關的調用約定。據推測,這些參數在這裏以'r0','r1'和'r2'傳遞,其中前兩個是指針,而'r2'是長度。 – Jester

+1

這是不太可能的,但是可能會有一些瘋狂的調用會議或非標準的'memcmp'簽名 - 單單這裏提供的信息不足以嚴格排除。也就是說,'memcmp' _usually_需要3個參數,並且在這裏加載了3個東西(你可以用你的指令集引用方便,不是嗎) - 兩個相對於某個寄存器的偏移量很小(你聞到堆棧幀?),而第三個來自硬編碼(即鏈接時固定)地址。嗯...;) – Notlikethat

+0

http://reverseengineering.stackexchange.com/ –

回答

1

似乎是一個非常標準的memcmp()調用。因此,參數通過r0..r2寄存器傳遞

相關問題