(Asm\C\Drivers) Таблица дескрипторов прерываний в x64 Vista
Есть ли способ сохранить \ загрузить таблицу дескрипторов прерываний на x64 Vista SP2 (AMD64) без Blue Screen? Вот мой код в MASM, который делает Blue Screen:
IDTINFO struct
word idtLimit ?
dword lowIDTBase ?
dword highIDTBase ?
IDTINFO ends
getInterruptDescriptorTable proto :DWORD
.code
getInterruptDescriptorTable PROC idtInfo_arg:DWORD
local idtInfo_locl :IDTINFO
sidt idtInfo_locl
lea eax, idtInfo_locl
push [eax]
mov eax, idtInfo_arg
pop [eax]
getInterruptDescriptorTable endp
end
Ну, я новичок в ассемблере, так что могут быть некоторые очевидные ошибки.
РЕДАКТИРОВАТЬ Вот как выглядит прототип в файле.h:
extern void getInterruptDescriptorTable(IDTINFO*);
Здесь, позвоните в файл.c:
IDTINFO idtInfo = {0};
getInterruptDescriptorTable(&idtInfo);
Структура IDTINFO в C:
typedef struct
{
unsigned short idtLimit;
unsigned int lowIDTBase;
unsigned int highIDTBase;
} IDTINFO;
2 ответа
Решение
Системы x64 защищены механизмом защиты патчей. Вы не можете найти путь без ID: http://en.wikipedia.org/wiki/Kernel_Patch_Protection
Скорее всего, это проблема с объявлением idtInfo_arg
как DWORD
- потому что вы находитесь в 64-битном режиме, вам нужно будет изменить их на QWORD
и использовать rax
вместо eax
,
Не могли бы вы опубликовать код, который вызывает вашу функцию?