2 《Undocumented Windows 2000 Secrets》翻译 --- 第二章

第二章 The Windows 2000 Native API
翻译: Kendiv
更新: Friday, February 04, 2005
Windows 2000 运行时库
Nt*() 和 Zw*() 函数构成了 Native API 的基本部分,但并不是主要部分,还有一部分代码位于 ntdll.dll 中 。该 DLL 至少导出了 1179 个符号 。其中的 249 和 248 个分别属于 Nt*() 和 Zw*() 函数集,剩余的 682 个函数并不通过 INT 2eh 中断进行调用 。显然,这一大组函数并不依赖 Windows 2000 内核 。那提供它们的目的何在呢?让我们继续往下看 。
C 运行时库
如果你研究过位于 ntdll.dll 导出节( export section )的符号,你会发现很多在 C 程序员看来很熟悉的小写的函数名称 。这些都是众所周知的名子,如 memcpy() 、 sprintf() 和 qsort() ,这些 C 运行时库中的函数都合并到了 ntdll.dll 中 。对于 ntoskrnl.exe 也是如此,它同样提供了一组与 C 运行时函数十分相像的函数,虽然这两组函数并不相同 。附录 B 的 表 B-3 列出了这两组函数,并指出了每个函数分别属于哪个模块 。
你可以简单的将 ntdll.lib (来自 Windows 2000 DDK )添加到导入库列表(链接器在解析符号期间将扫描该列表)中,就可以链接到这些函数 。如果你更喜欢对话框,你可以选择 Visual C/C的工程菜单中的 Settings 子菜单,然后单击 Linke 页,选择 Category General ,然后将 ntdll.dll 添加到 Object/Library 模块列表中 。还有一种方法:在源文件中,添加如下的内容:
#pragma comment(linker,”/defaultlib:ntdll.lib”)
这同样有效,好处是,其他开发人员可以使用 Visual C/C的默认设置来 rebuild 你的工程 。
反编译这些与 C 运行时函数类似的函数(来自 ntdll.dll 和 ntoskrnl.exe ),会发现 ntdll.dll 并不依赖于 ntoskrnl.exe ,这和 ndll.dll 中的 Native API 不一样 。事实上,这两个模块分别实现了这些函数 。本节出现的其他函数也是如此 。注意,表 B-3 中的一些函数并不使用其导出的名称 。例如,如果在内核模式的驱动程序中针对一个 64 位的 LARGE_INTEGER 使用移位操作符 << 和 >> ,编译器和链接器会自动导入 ntoskrnl.exe 的 _allshr() 和 _allshl()。
扩展的运行时函数
随同标准的 C 运行时函数,Windows 2000 还提供了一组扩展的运行时函数 。在次强调,ntdll.dll 和 ntoskrnl.exe 分别实现了它们 。并且其中有些函数是重叠的 。这些扩展函数的名字都有一个共同的前缀 Rtl ( for Runtime Library ) 。附录 B 的 表 B-4 列出了所有这些扩展函数 。Windows 2000 提供的这些运行时函数还包含用于普通任务的助手函数( helper function ),这些任务都超过了 C 运行时函数的能力范围 。例如,其中的某些用于管理安全性,另一些用于操作 Windows 2000 特有的数据结构,还有一些对内存管理提供支持 。很难理解为什么微软仅在 Windows 2000 DDK 中提供了其中 115 个函数的文档,而扔掉了其余 406 个非常有用的函数 。
浮点模拟器( The Floating-Point Emulator )
让我用 ntdll.dll 提供的另一组函数集合来结束这次 API 函数汇展 。表 2-1 列出了这些函数的名称,这些名称可能对于汇编程序员有些眼熟 。去了名称前的 __e 前缀,你就会得到 i386 系列 CPU 中的 FPU ( Floating-Point Unit )汇编助记符 。事实上,从 表 2-1 中列出的函数来看,ntdll.dll 包含了一个完整的浮点模拟器 。这再次证明了这个 DLL 是一个庞大的代码仓库,这吸引了众多的 System Spelunker 去反编译它 。
表 2-1. ntdll.dll 的浮点模拟器接口
函数名称
_eCommonExceptions
_eFIST32
_eFLD64
_eFSTP32
_eEnulatorInit
_eFISTP16
_eFLD80
_eFSTp64
_eF2XM1
_eFISTP32
_eFLDCW
_eFSTP80
_eFABS

推荐阅读