《Undocumented Windows 2000 Secrets》翻译 --- 第五章(2)

第五章 **** 监控 Native API 调用 **** 翻译: Kendiv( [email protected] ) 更新: Thursday, February 24, 2005 声明:转载请注明出处,并保证文章的完整性,本人保留译文的所有权利。 汇编语言的救援行动 通用解决方案的主要障碍是 C 语言的典型参数传递机制。就像你知道的, C 通常在调用函数的入口点之前会将函数参数传递到 CPU 堆栈中。根据函数需要的参数数量,参数堆栈的大小将有很大的差别。 Windows 2000 的 248 个 Native API 函数需要的参数堆栈的大小位于 0 到 68 字节。这使得编写一个唯一的 hook 函数变得非常困难。微软的 Visual C/C 提供了一个完整的汇编( ASM )编译器,该编译器可处理复杂度适中的代码。具有讽刺意味的是,在我的解决方案中所使用的汇编语言的优点正是通常被认为是其最大缺点的特性:汇编语言不提供严格的类型检查机制。只要字节数正确就一切 OK 了,你可以在任何寄存器中存储几乎所有的东西,而且你可以调用任何地址,而不需要关心当前堆栈的内容是什么。尽管这在应用程序开发中是一种很危险的特性,但这确实最容易获取的:在汇编语言中,很容易以不同的参数堆栈调用同一个普通的入口点,稍后将介绍的 API hook Di

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus