2016-01-25 86 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寄存器传递

相关问题