Dot-Net

如何檢測 dll 的類型?(COM、.NET、WIN32)

  • January 15, 2019

我需要處理文件夾中的一些 dll 和 exe 文件,並確定我正在處理的文件類型:.NET、COM、Win32 或其他一些外星生命形式。

我一直在嘗試確定檢測 DLL 類型的最簡單方法,您對此有何看法:

  1. COM dll => 我做了一個 LoadLibrary,然後 GetProcAddress 用於“ DllRegisterServer ”。如果我得到一個有效的回報,那就是一個 COM 文件。
  2. .NET dll => 如果 dll 依賴於MSCOREE.DLL它總是一個 .NET dll?
  3. Win32 dll => 如果上述兩個測試都失敗了,那是 Win32 dll 嗎?

當然,必須有更好的方法來檢測我們正在處理的 dll 類型。以上內容非常笨重,不適用於EXE文件?一定有其他我沒有想到的方法。

理想情況下,我希望能夠讓解析器確定文件是用什麼編譯器編譯的,以及它使用了哪些功能,例如 MFC、Atl、Stl 等……但我懷疑這在預反射時代是可能的嗎?

您必須檢查這些文件的 PE 標頭。所有 DLL 和執行檔,Win32 和 .NET,都有一個 PE 頭。

深入了解 Win32 可移植執行檔格式

.NET 文件格式

可移植的執行檔

DllRegisterServer 不是必需的,COM dll 唯一需要的導出是 DllGetClassObject

引用自:https://stackoverflow.com/questions/1420726