moRanges

moRanges struc
    CntRange   ULONG ?
    rng       
moRange ?
moRanges ends

pmoRanges TYPEDEF PTR moRanges

  • CntRange - количество подмножеств памяти, с предпочтительной RIP-аддрессацией.
  • rng - массив подмножеств.

    Примечание: В LONG_MODE инструкции использующие байт modrm для аддресации, могут к 6 Гб виртуальной памяти обращаться не зависомо от текущего значения регистра rip. Для наглядности приведу не большую таблицу.

    No Диапазон modrm= 00xxx100b,sib=xx100101y Наличие префикса 67h
    1.  0000000000000000h..000000007FFFFFFFh -
    2.          80000000h..0FFFFFFFFh Да
    3. 0FFFFFFFF80000000h..0FFFFFFFFFFFFFFFFh Нет

    Здесь нужно учитывать, что указатель из структуры Instruction, ModrmOffsets указывает на структуру moRanges которая содержит подмножества первых двух диапазонов, а сразу за ней идёт еще одна такая структура с подмножествами из третьего диапазона, и в ней уже учитывается расширение знака.

    По умолчанию в первой структуре одно подмножество 400000h..0FFFFFFFFh, а во второй ни одного. Для обращения к аддресам этих 6 Гб, не попадающим ни в одно подмножество, при ассемблировании всегда используется более длиный rip`о независимый вариант, с sib байтом, даже если значение rip`a позволяет RIP-аддрессацию. Добавить можно не более 2 своих подмножеств, в противном случае вы должны вернуть эти структуры в кучу процесса с помощью HeapFree, и затем определять большее количество.

  • Сайт управляется системой uCoz