Тонкости дизассемблирования :: Kaspersky Kris
Страница:
20 из 21
Рассмотрим обе команды в двоичном виде:
Как уже говорилось выше, младшие три бита — это код регистра. Однако, его невозможно однозначно определить без утончения размера операнда. Обратим внимание на третий (считая от нуля) бит. Он равен нулю для AH и единице в нашем случае. Рискнем предположить, что это и есть бит размера операнда, хотя этого явно и не уточняет Intel, но вытекает из самой архитектуры команд и устройства декодера микропроцессора.
Обратим внимание, что это, строго говоря, частный случай, и все могло оказаться иначе. Так, например, четвертый справа бит по аналогии должен быть флагом направления или знакового расширения, но увы — таковым в данном случае не является. Четыре левые бита это код операции ' mov reg , imm '. Запомнить его легко — это «13» в восьмеричном представлении.
Итак, 0BEh 03Bh 001h — это MOV SI ,013 Bh . Скорее всего, 013bh — это смещение, и за этой командой последует расшифровщик очередного фрагмента кода. А может быть и нет — это действительно смелое предположение. Однако, байты 030h 024h это подтверждают. Хакеры обычно так часто сталкиваются с функций xor , что чисто механически запоминают значение ее кода.
Не трудно будет установить, что эта последовательность дизассемблируется как XOR [ SI ], AH . Следующий байт 046h уже нетрудно «угадать» — INC SI . Кстати, посмотрим, что же интересного в этом коде:
Третий бит равен нулю! Выходит команда должна выглядеть как INC AH ! (Что кстати, выглядит непротиворечиво смысле дешифровщика). Однако, все же это INC SI .
|< Пред. 17 18 19 20 21 След. >|