我需要區分兩個二進制文件 - 一個驅動程序和一個常見的DLL。據我所知,我需要查看這些文件的部分(例如通過DumpBin),看看是否有一個INIT部分。這個標準是否完整?如何區分Windows驅動程序與DLL
2
A
回答
1
您需要解析二進制文件並查看IMAGE_OPTIONAL_HEADER的子系統字段,如果它是NATIVE,那麼它是一個驅動程序。看看下面的鏈接瞭解詳細信息:
+0
並非完全如此。它可能是一個本地程序或DLL或內核模式DLL。除了「* no *子系統」之外,「本地」其實並不意味着什麼。這不是一個神奇的子系統生活在每臺Windows機器上:) – 0xC0000022L 2012-04-03 17:54:00
0
你將不得不使用啓發式確立這一事實,並肯定儘可能。問題在於,確實存在本地用戶模式程序(例如autochk.exe
)和DLL(坦率地說,沒有任何東西可以讓人想起,但我已經將它們看作本地程序的一部分,它在winlogon.exe
運行之前執行)以及內核模式對應(bootvid.dll
,hal.dll
和內核以其各種形式之一ntoskrnl.exe
)。
所以要建立它,你可以試試下面的驅動程序:
IMAGE_OPTIONAL_HEADER::SubSystem
,如所指出的,應該意味着它的「原生」(即沒有子系統:IMAGE_SUBSYSTEM_NATIVE
)- 驗證
IMAGE_FILE_HEADER::Characteristics
是不 DLL(這將意味着它是一個內核或用戶模式DLL,對證IMAGE_FILE_DLL
) - 確保其內是否不進口
ntdll.dll
或其他用戶模式DLL,或者相反,它會導入內核模式模塊之一(ntoskrnl.exe
,hal.dll
,bootvid.dll
)以確定它是否以內核模式或用戶模式運行。
結構和定義都包含在winnt.h
中。
要點:
- 建立子系統(僅
IMAGE_SUBSYSTEM_NATIVE
是你的案子有意思) - 建立它是一個DLL或不
- 確定它是否鏈接對用戶或內核模式組件
相關問題
- 1. 如何做windows驅動程序簽名?
- 2. Windows設備驅動程序與VB.Net
- 3. 如何從我的Windows驅動程序代碼中區分devmgmt的Disable和Uninstall?
- 4. Windows驅動程序編程或Linux驅動程序編程?
- 5. 如何在Windows 8中將驅動器與主啓動分區合併?
- 6. Windows驅動程序創建
- 7. Windows驅動程序的EXPORT_SYMBOL()
- 8. windows驅動程序開發
- 9. Windows設備驅動程序
- 10. Windows驅動程序證書
- 11. 創建Windows驅動程序
- 12. Windows驅動程序簽署
- 13. Windows 7 kinect驅動程序
- 14. 卸載Windows驅動程序
- 15. 虛擬驅動程序與Windows驅動程序模型 - 從哪裏開始?
- 16. 驅動程序開發:卸載Windows驅動程序
- 17. 在Windows中編程區分USB軟盤驅動器和USB閃存驅動器
- 18. 如何使Windows ADB驅動程序與現有的Linux ADB驅動程序一樣簡單?
- 19. Selenium遠程驅動程序與HtmlUnit驅動程序問題
- 20. 設備驅動程序DLL阻塞與非阻塞?
- 21. 啓動Windows驅動程序開發
- 22. 自動化Windows驅動程序版本
- 23. 學習編程Windows驅動程序
- 24. Microsoft PHP SQL驅動程序與PHP SQL驅動程序
- 25. windows設備驅動程序中pdo和fdo有什麼區別?
- 26. 如何區分DLL文件
- 27. 如何爲我的驅動程序啓動Windows徽標測試?
- 28. 如何加載和啓動Windows驅動程序?
- 29. Windows安裝程序設置與COM Dll
- 30. 如何爲給定的ODBC驅動程序獲取ODBC驅動程序DLL文件的名稱
只要看看IMAGE_OPTIONAL_HEADER.SubSystem字段。 Dumpbin.exe /頭文件也會顯示它。 – 2012-04-03 17:31:47