Visual c++ 如何获取在我的软件中发生的DLL加载通知(仅在我自己的进程中)
首先,一些背景: 我的软件是用VC++编写的,它依赖于与我的应用程序一起加载的一些大型第三方DLL。这些LIB通常在其正常操作过程中引发浮点异常,但由于浮点控制字的默认配置掩盖了这些异常,因此程序不会因此而崩溃,因此它们不会作为硬件异常发出信号 现在的问题是,当一些第三方程序如Visual c++ 如何获取在我的软件中发生的DLL加载通知(仅在我自己的进程中),visual-c++,exception,dll,floating-point,hook,Visual C++,Exception,Dll,Floating Point,Hook,首先,一些背景: 我的软件是用VC++编写的,它依赖于与我的应用程序一起加载的一些大型第三方DLL。这些LIB通常在其正常操作过程中引发浮点异常,但由于浮点控制字的默认配置掩盖了这些异常,因此程序不会因此而崩溃,因此它们不会作为硬件异常发出信号 现在的问题是,当一些第三方程序如ZealSuffSuper ScortPask注入自己在Borland C++中写的DLL时,他们设置FP控制字,使浮点异常和我的应用程序崩溃。 虽然主要的问题可能是第三方库和第三方软件注入了自己的Dll,但我仍然希望保护
您还可以扫描program files文件夹()并警告用户存在已知的兼容性问题 您可以在windows上执行此操作,特别是要监视调试事件。需要注意的是,自己调试是危险的,因为这可能导致应用程序锁定,也意味着你不能正常调试它 另一种方法是在
LoadLibraryEx
、LoadLibraryA
和LoadLibraryW
上做一个进程范围的()钩子,并检查dll是否通过那里
这方面的主要问题是,您需要确保在加载进程中的任何其他内容(您关心的)之前安装挂钩/监视器,这可能需要更多的“黑魔法”…是的,我同意DLL应该恢复FP标志的状态。但问题是,Borland C++被默认为启用这些FP标志,人们不需要经常在不需要它们时禁用它们。当这些DLL被注入到禁用它们的进程中时,问题就变得特别严重。虽然我们确实安装了一个异常处理程序,但在异常发生后处理这种情况就太晚了。我尝试过的一件事是挂接LoadLibraryEx并从那里重置FP标志,它工作了感谢您的回复,我确实通过IAT补丁成功挂接LoadLibrary调用并解决了问题,但我担心的是,这种补丁是否会触发恶意软件/病毒扫描程序的启发。