Дизасм и всё, всё, всё...

Тема в разделе "WASM.WIN32", создана пользователем Bill_Prisoner, 28 дек 2005.

  1. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    У меня, например есть команда

    mov eax,dword ptr [edx]

    Этой команде соответствует машинный код, например такой 8B02.

    Ставим перед командой 11 префиксов - 67 - префикс для переопределения размера адреса. Вопрос: везде написано, что команда может иметь не более 4-х префиксов. А данная команда имеет 11 и нормально выполняется. Это что ошибка в источниках.

    И еще где можно почитать про дизасмы? Вопрос для The Svin. Потому что он является магом в этой области. Знаю что такие вопросы уже были, но ответов мало и все указывают на этот сайт и программы The Svin в которых недостаточно материала. Хочется почитать Криса и его книгу Disasm In Uncovered, но скачивал архив но он не работает :dntknw:

    Заранее спасибо всем!
     
  2. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Извините, про то что прочитать проехали - нашел книгу The Svin про опкоды. А вопрос про префиксы остается в силе.
     
  3. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Дык написано всё там в статьях про префиксы.

    Логически разных префиксов может быть 4.

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

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

    На практике я ещё с этим не встречался ни на одной машине.

    Так что может или не может на каких-то машинах она к ним привести - не знаю, знаю только что на тех машинах на которых я работал - ни к каким "непредсказуемым последствиям" дублирование префиксов не приводило.

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

    т.е. если поставишь repe repne - то сработает repne

    если repne repe - то сработает repe.

    По крайней мере так вели себя дешифраторы на знакомых мне машинах. И об этом уже писал я.

    А Крыса про опкоды лучше не читай, - полный бред.

    И я тоже не маг никакой - просто однажды попросили рассказать на борде у Hiro как научится осознано кодировать в машинных кодах, с тех пор всё и спрашивают.
     
  4. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Под 'не более 4х' подразумевается, что большее кол-во префиксов использовать нет смысла (т.е. lock/repX + 66 + 67 + префикс переопределения сегмента). Но, тем не менее, можно задать и большее кол-во префиксов, в т.ч. перекрывающиеся. Процессор работает с префиксами по след правилам:

    1. LOCK, 66h, 67h -- ХОТЯ БЫ ОДИН. Т.е., не важно сколько в команде префиксов 66/67/LOCK и в каком они порядке.

    2. REPZ/REPNZ и ES/CS/SS/DS/FS/GS -- ПОСЛЕДНИЙ ВСТРЕТИВШИЙСЯ.



    Т.е. команда

    66 26 67 66 3E F3 F3 67 26 26 3E F2 FF 00

    (в 32-bit mode)

    равносильна команде
    Код (Text):
    1.  
    2.        repnz
    3.        segds
    4.        inc  word ptr [bx+si]
     
  5. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Большое спасибо! Сейчас приступил к читанию книги The Svin. Возможно надо мануалами обзавестись. Просто я пишу дизасм для 32-хбитного x86. Вот не знаю как будет обстоять дело при портировании 32-хбитного дизасма на 64-битную платформу.
     
  6. Bankir

    Bankir New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2005
    Сообщения:
    1
    Bill_Prisoner

    Огромный привет Вам, интересно, есть ли возможность влиться в ваш коллектив? Очень буду рад вашему ответу, спасибо. :)