在此汇编代码的strcpy调用中实际上在比较哪些字符串?

时间:2018-10-16 06:53:35

标签: reverse-engineering disassembly

这是汇编代码的一部分

mov dword [esp+0x4], 0x80bf7a8
mov eax, dword [ebp-0x78] ; pointer to char array on heap
mov dword [esp], eax
call fcn.080482a0

...

0x080482a0   jmp dword [0x80ec03c]

...

0x080ec03c   .dword 0x0805c260 ; sym.strcmp

所以基本上,这意味着strcmp(heap_ptr, 0x80bf7a8)被调用了,我想我只需要查询0x80bf7a8的内容。但是我只能在该地址找到以下内容:

0x080bf7a8   3000   xor byte [eax], al

我不明白这里发生了什么。在该内存地址之后有一些字符串,但是它们是由程序打印的字符串,因此在此strcmp中使用它们是没有意义的(无论如何它们都位于错误的内存地址)。但是如何将看起来是xor指令的内容作为参数传递给strcmp?

或者这只是对我的逆向工程工具(radare2)的误解,它实际上是在比较堆上的字符串与单词3000(这是'0'的以null终止的ascii字符)吗?

1 个答案:

答案 0 :(得分:2)

是的,它是'0'字符。 Radare只是出于某种原因才认为这是代码,因此将30 00分解为xor byte [eax], al

IDA也会发生这种情况,只需将该内存标记为数据即可。