-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
我非常感谢任何帮助。
您应该查阅相关的调用约定。据推测,这些参数在这里以'r0','r1'和'r2'传递,其中前两个是指针,而'r2'是长度。 – Jester
这是不太可能的,但是可能会有一些疯狂的调用会议或非标准的'memcmp'签名 - 单单这里提供的信息不足以严格排除。也就是说,'memcmp' _usually_需要3个参数,并且在这里加载了3个东西(你可以用你的指令集引用方便,不是吗) - 两个相对于某个寄存器的偏移量很小(你闻到堆栈帧?),而第三个来自硬编码(即链接时固定)地址。嗯...;) – Notlikethat
http://reverseengineering.stackexchange.com/ –