Это часть ассемблерного кода
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, которое является символом ascii с нулевым символом в конце для '0'?