-
-
[求助]堕落天才的<另一种sysenter hook方法>中一段代码的问题
-
发表于:
2007-11-16 13:08
5180
-
[求助]堕落天才的<另一种sysenter hook方法>中一段代码的问题
下面这段是堕落天才的<另一种sysenter hook方法>(地址:http://bbs.pediy.com/showthread.php?t=42705)一文中的一段代码,是在KiFastCall中跳转到自己的这段代码
__declspec(naked) void MyKiFastCallEntry(void)
{
__asm
{
pop edi //因为用到了edi来跳转 这里恢复
mov i, eax //得到服务ID
}
__asm
{
pushad
push fs
push 0x30
pop fs
}
DbgPrint("sysenter was hooked! Get service ID:%X",i); //证明自己存在
__asm
{
pop fs
popad
jmp pMovedSysenterCode //第二跳,跳转到原来的函数头代码
}
}
上面跳进来后,保存了eax中的服务ID,然后pushad
然后下面的popad对应上面的pushad,按理说我按照下面这样在popad后面修改eax的值应该没有什么不妥的吧?
__declspec(naked) void MyKiFastCallEntry(void)
{
__asm
{
pop edi //因为用到了edi来跳转 这里恢复
mov i, eax //得到服务ID
}
__asm
{
pushad
push fs
push 0x30
pop fs
}
DbgPrint("sysenter was hooked! Get service ID:%X",i); //证明自己存在
__asm
{
pop fs
popad
mov eax, i
jmp pMovedSysenterCode //第二跳,跳转到原来的函数头代码
}
}
我这样测试的目的是想在这期间修改服务ID为自己添加在SSDT中的自己构造的处理函数的服务ID
因为暂时还只测试到这里,在这期间我并没有修改全局变量i中的值,就是说前面mov i, eax到mov eax, i这里eax的值根本就没变过.
但是我这样改之后,加载驱动后系统要不就卡死,要不就蓝屏....注释掉mov eax, i这句就又一切正常...
请问下为什么额?
[课程]Linux pwn 探索篇!