约有 74 项符合查询结果, 以下是第 5 - 8项。
费时 < 1 秒。
请看一段驱动的代码
void f()
{
KIRQL o;
_asm int 3
KeRaiseIrql(APC_LEVEL,&o);
_asm int 3
KeLowerIrql(DISPATCH_LEVEL);
_asm int 3
KeRaiseIrqlToDpcLevel();
KeInitializeEvent(&e,NotificationEvent,FALSE);
_asm int 3
KeWaitForSingleObject(&e,Executive,KernelMode,FALSE,NULL);
_asm int 3
_asm int ...
Posted in Windows内核调试
by
zyq8709
on 2011-06-22
我一直以为当前Irql值在KPRCB结构的Irql域中存储的,而ReactOs中也是这样处理的。但是我在调winXP
sp2代码时发现,xp并非在此处存储。而XP的KfRaiseIrql中几行关键代码是这样的:
806d1279 b6d1 mov dh,0D1h
806d127b 0fb68a58126d80 movzx ecx,byte ptr hal!HalpIRQLtoTPR (806d1258)[edx]
806d1282 a18000feff mov eax,dword ptr ds:[FFFE0080h]
806d1287 890d8000feff mov dword ptr ...
Posted in Windows内核调试
by
zyq8709
on 2011-06-22
我看到有些地方说在dispatch级上调用等待函数,会导致当前线程挂起并会引起线程切换,由于在dispatch级,所以无法切换线程,所以会导致死锁并崩溃。
请看一些代码:
KEVENT e;
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
unsigned i;
for (i = 0; i MajorFunction<img src=''/emoticons/emotion-55.gif'' alt=''Idea [I]'' /> = ...
Posted in Windows内核调试
by
zyq8709
on 2011-06-21
多谢王老师的回答。
那么说只要不执行sysenter而换成int 0x2e,就不会有调用Ring 3 API失败的结果了?
那么对于老的系统和CPU,那么这一限制将不复存在?
Posted in Windows内核调试
by
zyq8709
on 2011-06-19
多谢王老师的回答。
我回顾了一下,发现导致我出问题的两个原因:一是我下载的符号表有问题,无法显示ntdll.dll的符号,导致调试困难。二是最重要的原因,我记错了sysenter的入口,把断点下在了KiSystemService处,而非下在KiFastCallEntry,导致我拦截的都是从内核发起的调用,故而他的previous mode都是Kernel mode,导致了我的调试结果错误。但是我拦截的结果是对的,也就是说由于参数跨界导致了异常处理而调用NtContinue然后导致线程终止驱动映像卸载。
还有一个问题是,在KiFastCallEntry中人为制造了一个自陷框架,并用push ...
Posted in Windows内核调试
by
zyq8709
on 2011-06-18
汇报一下我的调试结果:
大致是在回调函数中多次调用CreateFileW,并在每个CreateFileW函数上下各写入几个int 3,结果显示只有在回调函数中第一个CreateFileW之上的可以断下,下边所有的断点和剩余的CreateFileW都没被执行。而且我还发现CreateFileW函数并未执行到sysenter,而调用CreateFileW后第一个执行到sysenter后的第一个内核函数为NtContinue,然后该线程被强行终止,并结束运行,附带的结果是内核的驱动映像也被卸载。
我感觉问题应发生在用户空间,因为一旦进入内核,所有的环境包括堆栈位置、previous ...
Posted in Windows内核调试
by
zyq8709
on 2011-06-17
王老师,我调试的时候又发现了些问题,对照源码:
kss80: test byte ptr [ebp].TsSegCs, MODE_MASK ; test previous mode
jz KiSystemServiceCopyArguments ; if z, previous mode kernel
mov eax, STATUS_ACCESS_VIOLATION ; set service status
jmp kss60
KiSystemServiceCopyArguments:
rep movsd
kssdoit:
...
Posted in Windows内核调试
by
zyq8709
on 2011-06-17
通过用SCM加载驱动一个NT式驱动(DriverMonitor或是insdrv等工具),都会出现一个问题:第一次加载卸载都正常,再次加载就会失败提示The ImagePath specified in driver's service database entry is incorrect,or the file is ...
Posted in Windows内核调试
by
zyq8709
on 2011-06-17
我又研究了一下解决了,关键就是用了extern而不是_declspec(dllimport),用extern是连接的是exe中的存根函数,而非直接引用导入表。而那个0x00000000只是vc给出的汇编列表,但在我看pe文件的二进制时发现其实编译的结果就是存根函数地址,这个地址在重定位时可改变。而用_declspec(dllimport)时,全局变量的初始化时实际上是在启动函数调用了一个类似与构造函数来初始化的,这个函数由编译器自动生成。
Posted in Windows内核调试
by
zyq8709
on 2011-06-17