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

Discussion in 'WASM.ASSEMBLER' started by nbyte, Nov 1, 2009.

  1. nbyte

    nbyte New Member

    Blog Posts:
    0
    Joined:
    May 27, 2007
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    по опкоду.
     
  3. nbyte

    nbyte New Member

    Blog Posts:
    0
    Joined:
    May 27, 2007
    Messages:
    161
    А больше никак нельзя?
    Тоесть, например надо составить таблицу опкодов которые работают с сегментами?
     
  4. o14189

    o14189 New Member

    Blog Posts:
    0
    Joined:
    Jul 19, 2009
    Messages:
    320
    В коде операции это явно не кодируется. Можно строить предположения конечно проанализировав несколько подобных команд и их опкодов, но писать лучше не отклоняясь от документации, т к в будущем подобная хитрожопость обязательно выйдет боком

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

    Y_Mur Active Member

    Blog Posts:
    0
    Joined:
    Sep 6, 2006
    Messages:
    2,494
    nbyte
    просто в Intel синтаксисе под ассемблерной мнемоникой mov скрывается несколько разных опкодов, для обычных регистров один опкод, для сегментных другой и не только. Глянь ещё AT&T-синтаксис, но он жутко неудобный имхо
     
  6. nbyte

    nbyte New Member

    Blog Posts:
    0
    Joined:
    May 27, 2007
    Messages:
    161
    Хммм, спасибо за ваши ответы. Хоть на этом форуме есть люди которые это могут подсказать :) . Теперь буду уверен что по другому нельзя сделать.
     
  7. t00x

    t00x New Member

    Blog Posts:
    0
    Joined:
    Feb 15, 2007
    Messages:
    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 Воин против дзена

    Blog Posts:
    0
    Joined:
    Oct 31, 2007
    Messages:
    1,483
    Location:
    Подмосковье
    Если дизасм полноценный, надо ещё заранее знать, под какой режим предназначен дизассемблируемый код. Например, в 16- и 32-разрядном режимах один и тот же код команды должен дизассемблироваться по-разному (с 16- и 32-разрядными операндами и адресами).
     
  9. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    Y_Mur
    скорей непривычный