2013-06-26 1 views
0

Есть ли способ сохранить \ загружать таблицу дескрипторов прерываний на x64 Vista SP2 (AMD64) без синего экрана? Вот мой код в MASM, что делает Синий экран:(Asm C Drivers) Таблица дескрипторов прерываний на x64 Vista

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 

Ну, я новичок на ассемблере, поэтому могут быть некоторые очевидные ошибки.

EDIT Это как прототип в .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; 
+0

также не должно быть «ret» в конце процедуры? – PhiS

ответ

1

Скорее всего, это проблема с объявлением idtInfo_arg как DWORD - b Если вы находитесь в 64-битном режиме, вам нужно будет изменить их на QWORD и использовать rax вместо eax.

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