Что означают эти инструкции?

За последние два месяца я изучил основы реверс-инжиниринга, ассемблера и C. Я получил бинарный файл от моего друга; они попросили меня преобразовать этот двоичный файл в исходный код. Я использовал IDA Pro для реверсирования двоичного файла, но у меня возникла проблема с приведенными ниже инструкциями:

mov     [esp+230h+var_218], 74654D5Fh
mov     [esp+230h+var_214], 754D6C61h
mov     [esp+230h+var_210], 6873696Ch
mov     [esp+230h+var_20C], 5F61h

Я пытаюсь найти шестнадцатеричный, но я не нашел никаких результатов. Может кто-нибудь объяснить?


person Soi Bad BOysS    schedule 29.10.2014    source источник
comment
Похоже на Hello world или что-то подобное. Попробуйте прочитать его как ASCII.   -  person Kerrek SB    schedule 29.10.2014
comment
спасибо за комментарий, я нашел, что это значит .. спасибо   -  person Soi Bad BOysS    schedule 29.10.2014
comment
обратить этот двоичный файл в исходный код. Невозможно. Вы не можете восстановить комментарии вообще, а без символов отладки, даже исходные имена переменных. Лучшее, что вы можете сделать, это просто переписать исходный код со своими комментариями и осмысленными именами переменных.   -  person Peter Cordes    schedule 23.06.2016


Ответы (2)


x86 имеет порядок следования байтов, поэтому, чтобы прочитать его, вы начинаете справа налево от литерала двойного слова.

Строка "_MetalMulisha_", fwiw.

person Lord Kale XI    schedule 29.10.2014

Чтобы уточнить ответ лорда Кале XI, x86 — это архитектура с прямым порядком байтов. Фактически это означает, что мы сохраняем байты многобайтовых целых чисел назад, то есть с наименее значащим байтом вперед. Ссылка, которую я предоставил, дает довольно хорошее объяснение того, как это работает.

Итак, в этих инструкциях мы сначала перемещаем целое число 74654D5Fh куда-нибудь в память. По порядку это фактически записывает байты 5F 4D 65 74. Затем мы записываем целое число 754D6C61h в следующие четыре байта в памяти, что приводит к записи 61 6C 4D 75 и так далее.

После этих инструкций в памяти находится следующая последовательность байтов, каждый из которых можно интерпретировать как символ ASCII:

  0x74654D5F      0x754D6C61      0x6873696C      0x00005F61
       |               |               |               |
       V               V               V               V
[   var_218  ]  [   var_214  ]  [   var_210  ]  [   var_20C  ]
5F  4D  65  74  61  6C  4D  75  6C  69  73  68  61  5F  00  00
'_' 'M' 'e' 't' 'a' 'l' 'M' 'u' 'l' 'i' 's' 'h' 'a' '_' '\0' '\0'

Таким образом, эти инструкции записывают в память строку _MetalMulisha_, завершающуюся нулем, начиная с var_218.

person user1354557    schedule 22.06.2016