Ещё один дизасм для теста

Тема в разделе "WASM.RESEARCH", создана пользователем n0name, 19 июн 2005.

  1. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Вроде всё делал по докам от интел, но ...

    Для простоты отладки движка используется не чтение из файла, а непосредственный ввод в консоль. Для получения справки наберите .help.

    Вот ссылка - http://n0name-files.narod.ru/Disasm.rar
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Охренеть!!! Для каждой инструкции своя процедура диасма!!!

    Тебе не лень было такое писать?

    Если ты будешь новые инструкции добавлять, то мне тебя просто жалко...



    Насчет багов, их просто немерено:

    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 инструкции? сейчас они есть практически везде.

    Только тебе добавить их будет ой как трудно :)



    Для анализа кода дизассемблер абсолютно не пригоден, так как может только мнемоники формировать, да и простейщий полиморф выдаст кучу инструкций на которых он загнется просто.



    И еще хотелось бы сказать, что никакой оптимизацией кода там и не пахнет.



    Вердикт - переписать заново от начала и до конца, предварительно выучив формат инструкций. Вердикт окончательный и обжалованию не подлежит.
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Спасибо за конструктивную критику.

    >>Тебе не лень было такое писать?

    >>Если ты будешь новые инструкции добавлять, то мне тебя просто жалко...

    Нет,это так кажется что долго, на самом деле я представлял инструкцию как мнемоника+параметры. И добавление в таблицу нового элемента сводиться к описанию параметров и мнемоники.

    >>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 инструкции? сейчас они есть практически везде.

    >>Только тебе добавить их будет ой как трудно :)

    Их пока нет. Добавить будет нетрудно.

    >>Для анализа кода дизассемблер абсолютно не пригоден, так как может только мнемоники формировать, да и простейщий полиморф выдаст кучу инструкций на которых он загнется просто.

    Не отрицаю.

    >>И еще хотелось бы сказать, что никакой оптимизацией кода там и не пахнет.

    Я не пытался оптимизировать по скорости. Попытался по размеру кода.

    >>Вердикт - переписать заново от начала и до конца, предварительно выучив формат инструкций. Вердикт окончательный и обжалованию не подлежит.

    Формат инструкций я знаю. Переписывать - зачем?



    Ещё раз спасибо за найденные баги.
     
  4. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    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 кб.



    И еще вопрос, какова цель написания дизассемблера? На что он практически годен?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    >>И еще вопрос, какова цель написания дизассемблера? На что он практически годен?

    Получения мною опыта :). Также возмодно буду использовать в дальнейшем. Практически не на чё не годен.



    >>C7F034120000 до сих пор не исправлено. Еще раз повторяю - это INVALID OPCODE! Зачем нужен дизассемблер если на невалидный опкод он не ругается invalid, а выдает черт знает что?



    Я подхожу с той стороны, что компилятор не может скомпилировать такой код. А если я не могу определить, что эта за инструкция, то как я могу определить её синтаксис? То есть то количество байт идушие после КОП которые относятся к ней. Я просто представляю в виде db.
     
  6. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    632
    Адрес:
    Russia