(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,

Не могли бы вы опубликовать код, который вызывает вашу функцию?

Другие вопросы по тегам