如何区分Windows驱动程序和DLL

时间:2012-04-03 16:28:33

标签: windows dll driver init dumpbin

我需要区分两个二进制文件 - 驱动程序和常见的dll。据我所知,我需要查看这些文件的部分(例如通过DumpBin)并查看是否有INIT部分。这个标准是否完整?

2 个答案:

答案 0 :(得分:1)

你需要解析二进制文件并查看IMAGE_OPTIONAL_HEADER的子系统字段,如果它是NATIVE,那么它就是一个驱动程序。请查看以下链接以获取详细信息:

http://msdn.microsoft.com/en-us/library/ms809762.aspx

答案 1 :(得分:0)

您必须使用启发式方法来确定这一事实,并尽可能确定。问题是,确实存在本机用户模式程序(例如autochk.exe)和DLL(坦率地说,手头没有任何想法,但我已经将它们视为本机程序的一部分,它们在{{1}之前执行操作}运行)以及内核模式对应项(winlogon.exebootvid.dll和内核的各种形式hal.dll)。

所以建立它是一个驱动程序,你可以尝试以下:

    正如所指出的,
  1. ntoskrnl.exe应该表示它是“原生的”(即没有子系统:IMAGE_OPTIONAL_HEADER::SubSystem
  2. 验证IMAGE_SUBSYSTEM_NATIVE 不是 DLL(这意味着它是内核或用户模式DLL,请检查IMAGE_FILE_HEADER::Characteristics
  3. 确保它确实或导入IMAGE_FILE_DLL或其他用户模式DLL,或相反它导入了一个内核模式模块(ntdll.dll,{{ 1}},ntoskrnl.exe)确定它是以内核还是用户模式运行。
  4. 结构和定义都包含在hal.dll

    要点:

    • 建立子系统(只有bootvid.dll对你的案例很有意思)
    • 确定它是否为DLL
    • 确定它是否链接到用户或内核模式组件