程序如何从ring3跳到ring0、求指导、 - C++ Builder / Windows SDK/API
有无驱动都可以、内联汇编也行、求思路、
[解决办法]
据我所知无驱动的方法仅适合2000、XP、2003(不打补丁),而XP、2003用AMD64的都有问题
代码不记得了,帮你google了一下
- C/C++ code
void Ring0Proc() // 在Ring0中执行你自已的子程序 { asm mov eax,CR0; // 测验Ring3不能执行的特权指令 } // ===================================================== void __declspec(naked) NewInt() //新中断 { Ring0Proc(); asm iretd; } #define IntNo 3 void GotoRing0() { static DWORDLONG Buf; //静态或全局变量 asm { mov edi,offset Buf; sidt [edi]; // 取IDT->Buf mov ebx,[edi+2]; // 求中断门基址 add ebx,IntNo*8; mov esi,ebx; push edi; push esi; movsd; //保存原中断门->Buf movsd; cli; mov eax,offset NewInt; mov [ebx],ax; shr eax,16; mov [ebx+6],ax; // 修改新中断门 mov ax,0ee00h; mov [ebx+4],ax; // 设置门属性 int IntNo; pop edi; pop esi; movsd; // 恢复原中断门 movsd; sti; } } // =================================================== void __fastcall TForm1::Button1Click(TObject *Sender) { GotoRing0(); }
[解决办法]
以前WIN98可以,后来MS又改动了。
[解决办法]
只能使用驱动程序,其他方法都被封了
[解决办法]
VS+DriverStudio构建 Driver CB构—LL&APP 无驱动方式没玩过
[解决办法]
我知道,这个你应该去看一下 你那个CPU系列的数据手册。