Узнать длину инструкции

Тема в разделе "WASM.RESEARCH", создана пользователем Sholar, 8 янв 2012.

  1. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    s_d_f
    Помню такую комбинацию(одна из множества): 0F FF 05 - эта инструкция имеет поле ModR/M, тоесть весит 7 байт. Когда вы через свой лде прогоните её и получите то заветное значение, тогда мы оставим ваши органы в покое.
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.623
    Адрес:
    Russia
    sergegers
    найдите ошибку в его двиге - и тогда рвите хоть зубами :) так всех устроит ???

    зы: руки vs яйца - равноценные ставки ??? кто играет господа ???
     
  3. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Сколько эмоций из-за одного вопроса. Никто не спорит, что Малфой и компания разбирается в коденге лучше меня(это неправда конечно, скоро я порабощу мир и буду всем тут рулить, только разберусь тут с кое-какой мелочью ;) ), но если так противно отвечать на такой ламерский вопрос, можно было просто пройти мимо.
    Кто - нибудь может подкинуть x86 код(без расширений), длину которого двиг z0mbie неправильно вычислял?
     
  4. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    я ms-rem'овский использовал слегка. замечаний к нему не было
     
  5. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    Sholar
    0xD4.
     
  6. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Я в этом все равно не участвую. У меня эта инструкция не работает, и нигде не документировано. Откуда мне знать, может вам по мерещилось? Тогда что там органы, можете сразу харакири делать.
     
  7. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    А не могли бы вы сказать что это за инструкция такая? Вроде как 0F FF это illegal instruction, если мне не изменяет мой склероз.
     
  8. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    Прежде чем камень декодирует инструкцию и сгенерит #UD, он её считает. А читает он не абы что, а конкретно длину инструкции, налету её длину определяя по считывающимся байтам. Хоть инструкции и нет в таблице, исполнение её приводит к #UD, но она длину имеет. И к вашему удивлению декодируется стандартным образом, такое чувство что иснтрукция валидна, но она залочена для исполнения.
    Прсто у вас проблема - вы декодируете инструкции по паблик таблицам. Это излишне, ибо камень может сам длину инструкции определить, посредством её исполнения на границе страницы. В юзермоде из за кривого диспетчера исключений приходится использовать некоторый изврат(доп проверки), но в целом конечный код совершенный.

    Sholar
    Что же вы молчите, я дал вам опкод. Скажите хоть чтонибудь в своё оправдание.
     
  9. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Ни какого удивления я не испытываю, просто есть побочный эффект при данной последовательности байт считывается 3байта, а только потом генерится исключение. Это не доказывает что эта инструкция залочена, более того встает вопрос для любой версии микрокода это так, и последний вопрос, ответ на который я не совсем понял: если инструкция невалидна то смысл говорить о ее дизассемблировании?
     
  10. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    h0t
    Это вы с воздуха взяли ?
    Для однобайтовой иснтрукции считывается один байт. Если при раскодировании инструкции должно быть считан есчо один байт, то он считывается.

    Смысл есть. Для камня любая последовательность байт именуется инструкцией и имеет длину. Не существует инструкций с не определённой длиной. Посему алгоритм универсальный, не нужны вообще никакие таблицы(в ядре). Короче учить матчасть, потом только будите со мной спорить.

    Для троля выше который зомби лде просил опкод не читаемый я его узнал брутом, камень определяет реальную длину, которая сравнивается с тестируемым кривым двигателем. Это работает :P
     
  11. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Спорить и в мыслях не было, просто интерсено разобраться. А как вы определили, что у 0F FF 05 длина 3? опытным путем или из каких то других размышлений?
     
  12. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    h0t
    Я говорил что 3 ?
    Там есчо смещение есть, это раскодируется как ModR/M. Таких много инструкций.
     
  13. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Ну это не важно в принципе, интересен сам метод определения длины, эмпирический или нет?
     
  14. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    h0t
    Средствами камня.
     
  15. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Intel, AMD? реакция одинаковая?
     
  16. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Все инструкции вызывающие 100% #UD (кроме ud2) на уровне "фантазии".

    Появляется несколько вопросов.
    1. Для чего их вообще дизассемблировать? Мало-ли что имеет длину.
    2. Как отличать рабочий код от явного мусора? Я не говорю о сложном анализе.
    3. Посмотрел LDE (mov dr7,ecx) в eax возвращает 1 или 2 (по разному), это что длина?
     
  17. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    h0t
    Всюду реакция одна, так как архитектура одна.
     
  18. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    s_d_f
    У вас не технические понятия. Длина инструкции это число байт, требуемых для полной её раскодировки. Дальше этого числа байт камень не читает память.
    1. Тоесть для чего нужен лде ? - определить длину инструкции. Вы просто путаете немного, я длину не определяю по таблицам, это делает процессор.
    2. Универсального способа нет.
    3. Эта инструкция не может быть ни 1 ни 2 байта. Так как имеет префикс двубайтовой инструкции(0xF), опкод(0x23) и байт ModR/M. Если у вас возвращается не это, тогда выкинте свой дизасм.
     
  19. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Malfoy
    1. Не надо подменять вопрос. Я спрашивал, зачем длина инструкций типа 0F FF 05? Это скорее побочный выхлоп процессора, чем что-то полезное.
    2. Да, есть только частные способы, например когда и линейного дизасма достаточно.
    3. тогда выкинте свой дизасм. LDE не мой дизасм.
     
  20. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    s_d_f
    1. Ваш двиг рассматривает только некоторые инструкции, описанные в таблицах. Как же вы не поймёте что любая последовательность байт раскодируется и имеет длину. Я могу отклонить все инструкции замаскированные, попыткой их исполнения.
    2. Ваш в смысле тот, которым вы дизасмите.