如何拦截Windows中的C库调用?

时间:2013-09-27 19:26:29

标签: c windows dll tracing

我从C代码库中丢失了devilish-gui.exedevilish.dlldevilish.h
仍然使用devilish-gui来自客户,它使用devilish.dll

devilish.h在30页的pdf中记录不足:它公开了一些C函数,这些函数根据作为参数提供的结构中的值以非常不同的方式运行。

现在,我必须使用devilish.dll来编写一个新的devilish-webservice。不,我不能改写它。

文档几乎没用,但由于我有devilish-gui.exe,我想编写一个不同的devilish.h实现,以便它将函数的调用和参数记录在一个文件中,而不是调用原来的dll功能。类似于ltrace在linux上所做的事情,但专门用于这个奇怪的库。

如何在Windows上编写这样的“拦截”dll并将其注入devilish.dll和devilish-gui.exe之间?

1 个答案:

答案 0 :(得分:3)

有几种可能性:

  1. 使用Detours
  2. 如果您将devilish.dll的实现放在与devilish-gui.exe相同的目录中,并将devilish.dll的实际实现移动到子目录中,Windows将加载您的实现而不是真实的实现。然后,您的实现可以转发到真实的实现。我假设devilish-gui不是hardened against search path attacks.
  3. 另一种方法是使用IntelliTrace收集所有调用devilish.dll的跟踪日志。