阅读:1788回复:2
请教几个宏定义SYSTEMSERVICE SYSCALL_INDEX
#define SYSTEMSERVICE(_func) \
KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_func+1)] 这里没看明白,ServideTableBase是一个指针,那后面的[ ](方括号)中就应该是一个索引号,*(PULONG)也实现了取一个地址中的内容作为索引号。不明白的地方有下面2个: a._func+1应该是函数_func的地址下一个地址,这个地址是一个函数地址还是会出现其他的地址呢?它的内容会是什么呢?会是我们想要返回的么? b.SYSTEMSERVICE是采用由ntoskrnl.exe导出的Zw*函数的地址,并返回相应的Nt*函数在SSDT中的地址。 就是说应该返回的是:_func在SSDT中的地址,那为什么要在它的地址再加一个1呢? 高手指点下,谢谢,感激不尽 |
|
沙发#
发布于:2009-04-06 09:02
拜托呀!谁指点下!
|
|
板凳#
发布于:2009-04-18 10:13
驱动我也是初学,不过汇编还过得去,根据汇编代码,Zw函数开头一般是用mov eax, xxxx把服务号给eax,加1把mov指令跳过,得到的刚好是xxxx,感觉比较靠人品,万一以后第一句换成mov edi, edi,那就完了。
不过不知道是看书不仔细还是怎么回事?这些系统服务函数,我咋就找不到函数参数调用方式的说明呢?看汇编代码,_cdecl,_stdcall还是_fastcall都不像,不知道该怎么传参数。 |
|