有没有办法在不带蓝屏的x64 Vista SP2(AMD64)上保存\加载中断描述符表?这是我在MASM中制作蓝屏的代码:
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);
C中的IDTINFO结构:
typedef struct
{
unsigned short idtLimit;
unsigned int lowIDTBase;
unsigned int highIDTBase;
} IDTINFO;
答案 0 :(得分:1)
将idtInfo_arg
声明为DWORD
的问题很可能是一个问题 - 因为您处于64位模式,您需要将这些更改为QWORD
,并使用{ {1}}代替rax
。
您是否可以发布调用您的函数的代码?
答案 1 :(得分:1)
x64系统受补丁保护机制保护。你可以在不使用bsod:http://en.wikipedia.org/wiki/Kernel_Patch_Protection
的情况下使用路径idt