· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Как написать дизассемблер?

<< . 1 . 2 . 3 . 4 . 5 .

Посл.отвђт Сообщенiе


Дата: Авг 9, 2003 08:27:38

Таблицу опкодов можно представить так:

struct TOperand {
BYTE Type,Size,Pos,Len;
};
struct TInstruction {
DWORD Code,Mask;
char Mnemonic[16],DirectionBit,SizeBit,ImmSizeBit;
bool IsExtended;
TOperand Op1,Op2,Op3;
};

Пояснения: Code=(4 байта машинного кода)&Mask. Например, для инструкции xchg reg,ax Code=0x90, Mask=0x0F8.
Type задаёт тип операнда: reg, reg/mem, imm, offset и т.д. Size определяет размер операнда: 8/16(32), 8, 16, 32, 16(32) и т.д. 8/16 означает, что размер операнда определяется битом размера (SizeBit); 16(32) означает, что размер определяется разрядностью кода. Все префиксы (в том числе 0x0F, который является префиксом расширенной инструкции) надо анализировать отдельно.
Самый простой способ декодирования кода - цикл по массиву TInstruction.


Дата: Авг 31, 2003 03:52:49

Вот декодер memr поля и его возможного
расширения. Пришлось для тюторов всё одно
писать, хоть и зарекался я не лезть в это дело :)
Внутри тестирующая програма и сам декодер
с исходниками.
Кнопки 66 67 32bit w имитируют работу главной
программы которая собирает их в флаги, часть
из которых использует декодер memr.
Декодируемый опкод формируется из того, что
устанавливается в группах modr/m,sib,displacement
но две последние включаются в финальный опкод,
только если их наличие следует из соответсующих
значений в битах флагах 32bits,67h и
необходимых значений в байте modr/m.
На мой некомпетентый взгляд декодирование
memr наиболее сложное место в декодере.
Так, что вот.



436558393__memr.zip


Дата: Авг 31, 2003 04:49:30

Нашёл неправильную трактовку знакового байта в displacemtnt в 32х битном режиме адресации
Вот fixed.

829092356__memr.zip


Дата: Сен 14, 2003 09:41:46

Ну очень интересная ссылочка
http://home.t-online.de/home/Ollydbg/

Вот ну очень интересный исходник(правда не получаеться откомпилировать)--Интересная реализация структуры опкодов.

P.S. Этот тема не должна умереть!!!

1041967213__disasm2.zip


Дата: Сен 14, 2003 09:48:59

Неплохо бы было бы сделать анализатор машинного кода.
Результат бы выводился в виде 3D дерева.


Дата: Сен 15, 2003 03:47:49

Olly пока кое-что неправильно декодирует\кодирует.
Кое-что поправил, но подожду смотреть пока сам дебагер начнёт показывать ВСЁ правильно.
Olleh к его чести нормально реагирует на найденные ошибки и постоянно пытается совершенствоваться.

<< . 1 . 2 . 3 . 4 . 5 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.048