第五章 监控native api调用
翻译:kendiv( fcczj@263.net )
更新:
声明:转载请注明出处,并保证文章的完整性,本人保留译文的所有权利。
拦截系统调用在任何时候都是程序员们的最爱。这种大众化爱好的动机也是多种多样的:代码性能测试(code profiling)和优化,逆向工程,用户活动记录等等。所有这些都有一个共同的目的:将控制传递给一块特殊的代码,这样无论一个应用程序何时调用系统服务,都可以发现哪个服务被调用了,接收了什么参数,返回的结果是什么以及执行它花费了多少时间。根据最初由mark russinovich和bryce cogswell提出的技巧,本章将介绍一个可以hook任意native api函数的通用框架。这里使用的方法完全是数据驱动(data-driven)的,因此,它可以很容易被扩展,并能适应其他windows nt/2000版本。所有进程的api调用产生的数据都被写入一个环状缓冲区中,客户端程序可以通过设备i/o控制来读取该缓冲区。采用的数据协议(protocol data)的格式是以行为导向的ansi文本流,它符合严格的格式化规则,应用程序可以很容易的再次处理它们(postprocessing)。为了示范此种客户端程序的基本框架,本章还提供了一个示例性的数据协议察看器,该程序运行于控制台窗口中。