《Undocumented Windows 2000 Secrets》翻译 --- 第五章(1)[4]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 kendiv 的 blog

调用kisystemservice()时,需提供两个参数,由int 2eh的调用者通过eaxedx寄存器传入。eax包含从0开始的索引,该索引可用于一个api函数指针的数组,edx指向调用者的参数堆栈。kisystemservice()通过读取servicetable的一个成员的值(该成员是ntoskrnl.exe的一个公开数据结构:keservicedescriptortable5-1的左面列出了该结构)来获取函数数组的基地址。实际上,keservicedescriptortable指向一个包含四个服务表的结构,但默认情况下,仅有第一个服务表是有效的。kisystemservice()通过eax中的索引值进入内部结构kiservicetable,以查找可处理此api调用的函数的入口地址。在调用目标函数之前,kisystemservie()以相同的方式查询kiargumenttable结构,以找出调用者在参数堆栈中传入了多少字节,然后使用这个值将参数复制到当前内核堆栈中。此后,就只需要一个简单的汇编指令:call来执行api处理例程了。这里涉及的所有函数都符合__stdcall标准。

 

本文关键:《Undocumented Windows 2000 Secrets》翻译 --- 第五章(1)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top