yvqvan
驱动牛犊
驱动牛犊
  • 注册日期2008-10-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分47分
  • 威望362点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1788回复:2

请教几个宏定义SYSTEMSERVICE SYSCALL_INDEX

楼主#
更多 发布于:2009-04-03 10:14
#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呢?


高手指点下,谢谢,感激不尽
yvqvan
驱动牛犊
驱动牛犊
  • 注册日期2008-10-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分47分
  • 威望362点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-04-06 09:02
拜托呀!谁指点下!
w_anthony
驱动牛犊
驱动牛犊
  • 注册日期2006-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望91点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-04-18 10:13
驱动我也是初学,不过汇编还过得去,根据汇编代码,Zw函数开头一般是用mov eax, xxxx把服务号给eax,加1把mov指令跳过,得到的刚好是xxxx,感觉比较靠人品,万一以后第一句换成mov edi, edi,那就完了。
不过不知道是看书不仔细还是怎么回事?这些系统服务函数,我咋就找不到函数参数调用方式的说明呢?看汇编代码,_cdecl,_stdcall还是_fastcall都不像,不知道该怎么传参数。
游客

返回顶部