Вроде всё делал по докам от интел, но ... Для простоты отладки движка используется не чтение из файла, а непосредственный ввод в консоль. Для получения справки наберите .help. Вот ссылка - http://n0name-files.narod.ru/Disasm.rar
Охренеть!!! Для каждой инструкции своя процедура диасма!!! Тебе не лень было такое писать? Если ты будешь новые инструкции добавлять, то мне тебя просто жалко... Насчет багов, их просто немерено: C7F034120000 - выдает db C7h, LOCK XOR AL, 12h C7 /6 - нет такого опкода, 6666666666666666666666666666F731 - выдает DIV WORD PTR [ECX], на самом деле это invalid opcode так как его длина > 15 байт. 26F731 - где преффиксы? 8CE0 - у меня был такой баг, почитай соответствующий топик. 0F22C8 - MOV , EAX Без комментариев 9A341277777777 - а порядок в инструкциях с двумя Imm кто соблюдать будет? И это все я увидел за первые 5 минут, дальше тестить стало скучно. Где FPU инструкции? сейчас они есть практически везде. Только тебе добавить их будет ой как трудно Для анализа кода дизассемблер абсолютно не пригоден, так как может только мнемоники формировать, да и простейщий полиморф выдаст кучу инструкций на которых он загнется просто. И еще хотелось бы сказать, что никакой оптимизацией кода там и не пахнет. Вердикт - переписать заново от начала и до конца, предварительно выучив формат инструкций. Вердикт окончательный и обжалованию не подлежит.
Спасибо за конструктивную критику. >>Тебе не лень было такое писать? >>Если ты будешь новые инструкции добавлять, то мне тебя просто жалко... Нет,это так кажется что долго, на самом деле я представлял инструкцию как мнемоника+параметры. И добавление в таблицу нового элемента сводиться к описанию параметров и мнемоники. >>C7F034120000 - выдает db C7h, LOCK XOR AL, 12h >>C7 /6 - нет такого опкода, К сожалению не нашёл описания. >>6666666666666666666666666666F731 - выдает DIV WORD PTR [ECX], на самом деле это invalid opcode так как его длина > 15 байт. >>0F22C8 - MOV , EAX Не делал обработку таких ситуаций, сейчас сделал. >>26F731 - где преффиксы? Исправил. >>9A341277777777 - а порядок в инструкциях с двумя Imm кто соблюдать будет? call far ptr 7777h:77771234h - вывод ИДЫ CALL 7777h:77771234h - вывод моей проги О чём ты? >>Где FPU инструкции? сейчас они есть практически везде. >>Только тебе добавить их будет ой как трудно Их пока нет. Добавить будет нетрудно. >>Для анализа кода дизассемблер абсолютно не пригоден, так как может только мнемоники формировать, да и простейщий полиморф выдаст кучу инструкций на которых он загнется просто. Не отрицаю. >>И еще хотелось бы сказать, что никакой оптимизацией кода там и не пахнет. Я не пытался оптимизировать по скорости. Попытался по размеру кода. >>Вердикт - переписать заново от начала и до конца, предварительно выучив формат инструкций. Вердикт окончательный и обжалованию не подлежит. Формат инструкций я знаю. Переписывать - зачем? Ещё раз спасибо за найденные баги.
C7F034120000 до сих пор не исправлено. Еще раз повторяю - это INVALID OPCODE! Зачем нужен дизассемблер если на невалидный опкод он не ругается invalid, а выдает черт знает что? 0F22C8 - db Fh db 22h ENTER 1200h, 0h Почему дизассемблер это представляет как db? ведь структура инструкции соблюдена. А если такое при дизассемблировании реальной защиты будет происходить, то читать такой код и разбираться где правда, а где х. нает что будет трудно. Должен быть INVALID OPCODE. Набор инструкций очень мал, например нет rdmsr, wrmsr, rdtsc и много еще чего. И вообще, если дизассемблер не может найти такой опкод, то он не правильно определяет границы инструкций, и все что следует дальше дизассемблируется неверно. F2AB - где преффиксы? 0F012C00 - ADD DWORD PTR :[EAX+EAX*1], EBP Опять неправильно, 0F 01 /5 - нет такой комманды И при желании этот список продолжать можно долго.. А насчет 9A341277777777 - это я видимо не на трезвую голову в доки смотрел, так что извини Насчет оптимизации по размеру - ее не видно, так как размер 57 кб. И еще вопрос, какова цель написания дизассемблера? На что он практически годен?
>>И еще вопрос, какова цель написания дизассемблера? На что он практически годен? Получения мною опыта . Также возмодно буду использовать в дальнейшем. Практически не на чё не годен. >>C7F034120000 до сих пор не исправлено. Еще раз повторяю - это INVALID OPCODE! Зачем нужен дизассемблер если на невалидный опкод он не ругается invalid, а выдает черт знает что? Я подхожу с той стороны, что компилятор не может скомпилировать такой код. А если я не могу определить, что эта за инструкция, то как я могу определить её синтаксис? То есть то количество байт идушие после КОП которые относятся к ней. Я просто представляю в виде db.
2noname: примитивный дизассемблер длин by me, ногами не пинать :] http://dizzie.narod.ru/lde_beta.htm