Дизассемблер длин от Ms Rem и определение относительной адресации

Тема в разделе "WASM.BEGINNERS", создана пользователем paymera, 4 июн 2009.

  1. paymera

    paymera New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    15
    Доброго времени суток!
    В указанной в теме дизассемблере длин есть функция для определения команды с относительной адресации:
    Код (Text):
    1.  char __fastcall IsRelativeCmd(unsigned char *pOpcode)
    2. {
    3.     UCHAR Flags;
    4.     if (*pOpcode == 0x0F) Flags = OpcodeFlagsExt[*(PUCHAR)((ULONG)pOpcode + 1)];
    5.         else Flags = OpcodeFlags[*pOpcode];
    6.     return (Flags & OP_REL32);
    7. }
    Так вот, в случае если первый байт команды не 0x0F, то берется значение флага из массива OpcodeFlags по индексу значение опкода. И вот я смотрю этот массив и вижу что флаг относительно адресации стоит по индексам 0xE8, 0xE9 и..... почему-то 0xFF:
    Код (Text):
    1.     OP_DATA_PRE66_67 | OP_REL32,   // E8
    2.     OP_DATA_PRE66_67 | OP_REL32,   // E9
    3.     ..................
    4.     OP_MODRM | OP_REL32            // FF
    Из Intel документации так:
    Код (Text):
    1. FF /4 JMP r/m16 N.S. Valid Jump near, absolute indirect, address =
    2. sign-extended r/m16.
    3. FF /4 JMP r/m32 N.S. Valid Jump near, absolute indirect, address =
    4. sign-extended r/m32.
    Вроде абсолютный адрес тут . Или я не правильно понимаю что-то?