Опкоды

Тема в разделе "WASM.ASSEMBLER", создана пользователем t00x, 22 авг 2008.

  1. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Уверен, что такой вопрос уже был :), однако,
    в intel'овских мануалах написано, что при наличии в опкоде:
    ModRM = 00 XXX 100 (только SIB), и
    SIB = XX XXX 101,
    "effective address" вычисляется: [scaled index] + disp32.

    как формируется весь опкод? disp32, просто добавляется к опкоду?
    например для NOT:
    0xF7 00 010 100b 00 000 101 и + disp32?
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Да было темка, но похоже осталась только кешах гугла...
    Посему перезалил:
    IntelAmdQuickRef
    Там усё подробно.
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Все верно. При Mod=00b и Base=101b в SIB вместо регистровой базы кодируется "длинная" числовая база (адреса типа [esi*4] приводят к появлению 4-х нулевых байт в опкоде). В целом структура опкода такова: префиксы, основной код, ModRM, SIB, смещение, непосредственный операнд. Код NOT в принципе корректен, но компилятор при Scale=00b и отсутствии регистровой базы обычно не включает в команду SIB, т.е. у тебя получился not dword [eax*1+disp32], что эквивалентно not dword [eax+disp32], но на один байт длиннее и уже ни при каких условиях не позволяет закодировать "короткое" смещение.
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Y_Mur
    однако не настолько, чтобы определить что в "Table 2.2" в строке "[--][--]" надо писать "[--][--] + disp32 (если SIB.BASE = 101)"

    Phantom_84
    угу, разобрался.
     
  5. n0hack

    n0hack New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2008
    Сообщения:
    71
    могу еще посоветовать по теме статью криса касперски "Тонкости дизассемблирования (дизассемблирование в уме)". лежит где-то на insidepro
     
  6. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    угу, посмотрю.