(Asm \ C \ Drivers)x64 Vista上的中断描述符表

时间:2013-06-26 18:00:46

标签: assembly driver masm bsod

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

2 个答案:

答案 0 :(得分:1)

idtInfo_arg声明为DWORD的问题很可能是一个问题 - 因为您处于64位模式,您需要将这些更改为QWORD,并使用{ {1}}代替rax

您是否可以发布调用您的函数的代码?

答案 1 :(得分:1)

x64系统受补丁保护机制保护。你可以在不使用bsod:http://en.wikipedia.org/wiki/Kernel_Patch_Protection

的情况下使用路径idt