我需要区分两个二进制文件 - 驱动程序和常见的dll。据我所知,我需要查看这些文件的部分(例如通过DumpBin)并查看是否有INIT部分。这个标准是否完整?
答案 0 :(得分:1)
你需要解析二进制文件并查看IMAGE_OPTIONAL_HEADER的子系统字段,如果它是NATIVE,那么它就是一个驱动程序。请查看以下链接以获取详细信息:
答案 1 :(得分:0)
您必须使用启发式方法来确定这一事实,并尽可能确定。问题是,确实存在本机用户模式程序(例如autochk.exe
)和DLL(坦率地说,手头没有任何想法,但我已经将它们视为本机程序的一部分,它们在{{1}之前执行操作}运行)以及内核模式对应项(winlogon.exe
,bootvid.dll
和内核的各种形式hal.dll
)。
所以建立它是一个驱动程序,你可以尝试以下:
ntoskrnl.exe
应该表示它是“原生的”(即没有子系统:IMAGE_OPTIONAL_HEADER::SubSystem
)IMAGE_SUBSYSTEM_NATIVE
不是 DLL(这意味着它是内核或用户模式DLL,请检查IMAGE_FILE_HEADER::Characteristics
)IMAGE_FILE_DLL
或其他用户模式DLL,或相反它导入了一个内核模式模块(ntdll.dll
,{{ 1}},ntoskrnl.exe
)确定它是以内核还是用户模式运行。结构和定义都包含在hal.dll
。
要点:
bootvid.dll
对你的案例很有意思)