【问题标题】:How to distinguish Windows driver from dll如何区分 Windows 驱动程序和 dll
【发布时间】:2012-04-03 16:28:33
【问题描述】:

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

【问题讨论】:

  • 看看 IMAGE_OPTIONAL_HEADER.SubSystem 字段。 Dumpbin.exe /headers 也会显示它。

标签: windows dll driver init dumpbin


【解决方案1】:

您需要解析二进制文件并查看 IMAGE_OPTIONAL_HEADER 的 Subsystem 字段,如果它是 NATIVE,则它是驱动程序。详情请查看以下链接:

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

【讨论】:

  • 不完全正确。它也可以是本机程序或 DLL 或内核模式 DLL。 “原生”实际上意味着“no 子系统”。这不是每个 Windows 机器上某个地方的魔法子系统:)
【解决方案2】:

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

所以要确定它是一个驱动程序,你可以尝试以下方法:

  1. 正如所指出的,IMAGE_OPTIONAL_HEADER::SubSystem 应该表示它是“本地的”(即没有子系统:IMAGE_SUBSYSTEM_NATIVE
  2. 验证IMAGE_FILE_HEADER::Characteristics不是 DLL(这意味着它是内核或用户模式DLL,请检查IMAGE_FILE_DLL
  3. 确保它确实导入ntdll.dll或另一个用户模式DLL,或者相反,它导入内核模式模块之一(ntoskrnl.exehal.dll,@987654333 @) 来确定它是在内核模式还是用户模式下运行。

结构体和定义都包含在winnt.h中。

要点:

  • 建立子系统(只有IMAGE_SUBSYSTEM_NATIVE 对您的情况感兴趣)
  • 确定是否为 DLL
  • 确定它是否链接到用户或内核模式组件

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2014-03-25
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多