|
|
| Посл.отвђт | Сообщен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 к его чести нормально реагирует на найденные ошибки и постоянно пытается совершенствоваться. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.048 |