回答
在Linux上,可以使用LD_PRELOAD环境变量完成此操作。将此变量设置为指向包含要覆盖的符号的共享库,然后启动您的应用程序。
假设您事先知道所有的DLL函数,一种技巧是编写自己的包装器DLL,它将所有的函数调用转发给真正的DLL。这个DLL不必用C/C++编写。所有你需要做的就是匹配原始DLL的函数调用约定。
好吧...但是,如何强制运行进程调用我的dll而不是原来的? – 2008-10-21 02:40:42
有两种标准方法,我能想到的这样做
DLL导入表挂钩。
为此,您需要解析DLL的PE Header,找到导入表并写入自己的函数的地址,而不是写在那里的地址。您可以保存原始功能的地址以便稍后调用它。在这个wikipedia article的外部链接中的参考资料应该能够提供你所需的所有信息。直接修改代码。找到你想挂钩的函数的实际代码,并修改它的第一个操作码以跳转到你自己的代码。你需要保存那里的操作码,以便它们最终被执行。这比听起来更简单,主要是因为它已经以不低于微软本身的形式以Detours library的形式实现。
这是一件非常干净的事情。只需几行代码,您就可以将所有调用从所说的outlook.exe中替换为GetSystemMetrics(),并观察发生的奇迹。
一种方法的优点是另一种方法的缺点。第一种方法允许您正确添加一个手术钩给您想要的所有其他DLL通过解除挂钩的DLL。第二种方法允许你最全局的钩子拦截所有调用函数。
有关使用C/C++ API的库,请参阅Microsoft Detours。将其注入到所有其他程序中并不会触发病毒扫描程序/恶意软件检测程序,这有点不重要。但是你自己的过程是公平的游戏。
- 1. 如何“拦截”测试方法调用?
- 2. Python拦截方法调用
- 3. .NET方法调用拦截
- 4. C#4拦截方法调用
- 5. 拦截方法调用Objective-C
- 6. Python中的拦截方法调用
- 7. 拦截调用定义的PHP方法
- 8. 统一拦截调用基本方法
- 9. 拦截PHP中的方法调用
- 10. 拦截每个http调用ES6方法
- 11. 如何拦截Boo中的方法调用?
- 12. 如何拦截一个类的方法调用
- 13. 如何拦截C#中的静态方法调用
- 14. 如何拦截ruby中的方法调用?
- 15. 如何拦截GWT中的onSuccess()方法
- 16. 如何拦截WCF Web方法请求?
- 17. 拦截javascript调用
- 18. C#AOP方法子方法调用的拦截?
- 19. 多重方法拦截和拦截器重用
- 20. JUnit:拦截方法调用,然后调用不同的参数
- 21. 如何拦截/重写Windows ODBC调用?
- 22. 如何拦截
- 23. 如何为ILogger拦截拦截器
- 24. 使用属性拦截然后重新发出方法调用
- 25. 拦截COM dllhost.exe调用
- 26. Dojo - 拦截XHR调用
- 27. UITextView拦截调用setSelectedRange?
- 28. 拦截subprocess.Popen调用在Python
- 29. 如何使用AOP在超级参数中拦截方法调用?
- 30. 无法让Guice方法拦截工作
拦截来自加载DLL的应用程序内部还是外部?在特定流程或所有流程外部?你可以做更好的表达你的问题的工作! ;) – TheSoftwareJedi 2008-10-21 01:58:16
您希望定位哪种语言和Windows平台? – 2008-10-21 01:58:58