0

有没有办法在没有蓝屏的 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

好吧,我是汇编语言的新手,所以可能会有一些明显的错误。

编辑这是 .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;
4

2 回答 2

1

idtInfo_arg声明为-很可能是一个问题,DWORD因为您处于 64 位模式,您需要将这些更改为QWORD,并使用rax而不是eax.

您能否发布调用您的函数的代码?

于 2013-06-27T15:20:44.240 回答
1

x64 系统受到补丁保护机制的保护。没有 bsod 就无法路径 idt:http ://en.wikipedia.org/wiki/Kernel_Patch_Protection

于 2013-06-27T18:41:00.620 回答