Диссассемблер, разбор команды

Тема в разделе "WASM.ASSEMBLER", создана пользователем nbyte, 1 ноя 2009.

  1. nbyte

    nbyte New Member

    Публикаций:
    0
    Регистрация:
    27 май 2007
    Сообщения:
    161
    Здравствуйте.
    Пишу диссасемблер на tasm.
    И столкнулся со следующей трудностью.

    Попробую объяснить на элементарном примере
    Например имею команду MOV BX, CS
    Её код в Hex будет 8C CB
    В bin 10001100 11001011
    При разборе получаю

    * Opcode - 23h
    * D - 0
    * W - 0
    * MOD - 11b
    * REG - 001b
    * R/M - 011b

    Вопрос - как определить что поле REG содержит именно регистр сегмента?
    Уже долгое время пытаюсь понять, но так пока и несмог найти хорошего ответа.
     
  2. n0name

    n0name New Member

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

    nbyte New Member

    Публикаций:
    0
    Регистрация:
    27 май 2007
    Сообщения:
    161
    А больше никак нельзя?
    Тоесть, например надо составить таблицу опкодов которые работают с сегментами?
     
  4. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    В коде операции это явно не кодируется. Можно строить предположения конечно проанализировав несколько подобных команд и их опкодов, но писать лучше не отклоняясь от документации, т к в будущем подобная хитрожопость обязательно выйдет боком

    amd intel manuals -> www.google.com
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    nbyte
    просто в Intel синтаксисе под ассемблерной мнемоникой mov скрывается несколько разных опкодов, для обычных регистров один опкод, для сегментных другой и не только. Глянь ещё AT&T-синтаксис, но он жутко неудобный имхо
     
  6. nbyte

    nbyte New Member

    Публикаций:
    0
    Регистрация:
    27 май 2007
    Сообщения:
    161
    Хммм, спасибо за ваши ответы. Хоть на этом форуме есть люди которые это могут подсказать :) . Теперь буду уверен что по другому нельзя сделать.
     
  7. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    nbyte
    уже составили, смотрите
    Intel® 64 and IA-32 Architectures Software Developer’s Manual
    Volume 2B
    A.3 ONE, TWO, AND THREE-BYTE OPCODE MAPS
     
  8. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Если дизасм полноценный, надо ещё заранее знать, под какой режим предназначен дизассемблируемый код. Например, в 16- и 32-разрядном режимах один и тот же код команды должен дизассемблироваться по-разному (с 16- и 32-разрядными операндами и адресами).
     
  9. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Y_Mur
    скорей непривычный