хранить itdr на x64 - PullRequest
       27

хранить itdr на x64

2 голосов
/ 02 ноября 2010

Я попытался получить адрес idt в моем драйвере, я создал функцию в asm, которая возвращает то, что содержит idtr:

.data
  myData dq 0

.code
Function PROC
  sidt myData
  mov rax, myData
  ret
Function ENDP
END

Но адрес, который я получаю, странный, например, в windbg:

r idtr
idtr=fffff80000b95080

Однако мой драйвер показывает:

idtr = f80000b950800fff

Я читал, что на x64 IDTR содержит 64-битный базовый адрес таблицы IDT. Буду признателен, если кто-нибудь объяснит, почему мой вывод отличается от WinDbg.

1 Ответ

5 голосов
/ 02 ноября 2010

Вот что говорят Intel по поводу инструкции SIDT:

В 64-битном режиме размер операнда фиксирован и равен 8 + 2 байта. Инструкция хранит 8-байтовые базовые и 2-байтовые предельные значения.

и

DEST[0:15] <- IDTR(Limit);
DEST[16:79] <- IDTR(Base);

Это означает, что ваша переменная myData должна иметь длину 10 байт, а инструкции сохраняют ограничение в первых 2 байтах и ​​базовый адрес в следующих 8 байтах. Это также объясняет, почему ваше значение совпадает со значением WinDbg после первых ffff байтов.

...