Это часть ассемблерного кода
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»?