我需要编写一个存根模块,当给定 PE(DLL/EXE)作为输入时,它将确定它是普通的 Win32 DLL/EXE 还是 COM DLL/EXE。我需要以编程方式确定这一点。
是否有任何用于此目的的 Windows API?
我怀疑这很难做到接近 100% 的准确度。但有些想法:
COM DLL 将导出 DllRegisterServer 和 DllUnregisterServer 等函数。您可以使用 LoadLibrary() 加载 Dll,然后使用 GetProcAddress() 检查这些函数是否存在。如果它们在那里,那么它很可能是一个 COM dll。
普通的 win32 Dll 将导出 DllMain。您可以使用相同的技术来检查这一点。如果你找到它,那么它很可能是 win32。
我不知道有什么方法可以发现 exe 是否是 COM 服务器。使用 ATL 编写的服务器通常在其资源表中嵌入一个注册脚本,但它们不是必须的。而且你不需要使用ATL来编写COM服务器。使用“无注册表 com”的服务同样会有一个嵌入式清单。您可以扫描注册表(在 HKLM/Classes/Software/ 下)以查看该 exe 是否已注册,但该 exe 可能正在使用无注册表的 com,或者只是尚未注册。
希望有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)