在此汇编代码的 strcpy 调用中实际比较了哪些字符串?
What strings are actually being compared in the strcpy call of this assembler code?
这是汇编代码的一部分
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' 的空终止 ascii 字符?
是的,它是 '0'
个字符。 Radare 出于某种原因只是认为它是一个代码,并将 30 00
分解为 xor byte [eax], al
。
IDA 也会出现这种情况,只需将此内存标记为数据即可。
这是汇编代码的一部分
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' 的空终止 ascii 字符?
是的,它是 '0'
个字符。 Radare 出于某种原因只是认为它是一个代码,并将 30 00
分解为 xor byte [eax], al
。
IDA 也会出现这种情况,只需将此内存标记为数据即可。