Какие строки на самом деле сравниваются в вызове strcpy этого ассемблерного кода?

Это часть ассемблерного кода

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»?


person Keno    schedule 16.10.2018    source источник


Ответы (1)


Да, это '0' символ. Радар почему-то подумал, что это код, и разобрал 30 00 на xor byte [eax], al.

Это происходит и для IDA, просто пометьте эту память как данные.

person arrowd    schedule 16.10.2018