Какие строки на самом деле сравниваются в вызове strcpy этого ассемблерного кода? - PullRequest
0 голосов
/ 16 октября 2018

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

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

1 Ответ

0 голосов
/ 16 октября 2018

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

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

...