【问题标题】:How do you detect DLLs that are being statically loaded at run-time?如何检测在运行时静态加载的 DLL?
【发布时间】:2015-05-28 19:20:31
【问题描述】:

目标

为了使将我们的软件部署到生产环境中的技术人员更容易进行故障排除,我希望我们的 Windows 服务记录在运行时它无法加载/定位的所有 DLL服务启动时。没什么特别的,只是:

  • DLL 名称
  • 成功/失败

这对于 显式 加载的 DLL(例如使用 LoadLibrary())来说很容易。不幸的是,我不知道如何为应用程序启动时自动加载的 DLL 执行此操作(即 隐式 加载的 DLL)。

换句话说,您如何检测在运行时静态加载的 DLL?这甚至可能吗?

您能提供的任何指导将不胜感激!

附加上下文

  • 测试机:Windows 8.1 Enterprise (64bit)

参考文献

更新

更新1

为了让部署团队尽可能轻松,我希望在应用程序的事件日志MyWindowsService.log 中写一条明确的消息(毕竟,这是他们查找所有其他消息的地方)...但就 Mark Segal 而言,创建了一个 Windows 事件日志 条目:

Faulting application name: MyWindowsService.exe, version: 2.7.4.1, time stamp: 0x55673caa
Faulting module name: ImplicitlyLoadedLibrary.dll, version: 6.3.9600.17736, time stamp: 0x550f42c2
Exception code: 0xc0000135
Fault offset: 0x0009d4f2
Faulting process id: 0x168c
Faulting application start time: 0x01d0997fc49e50fe
Faulting application path: C:\Program Files (x86)\CompanyName\ApplicationName\MyWindowsService.exe
Faulting module path: ImplicitlyLoadedLibrary.dll
Report Id: 024adcd5-0573-11e5-830a-6c198fb1a83d
Faulting package full name: 
Faulting package-relative application ID: 

对于任何有兴趣的人Exception code: 0xc0000135 意味着: 找不到依赖的 dll

更新 2

最初的意图是看看:

  1. 您能否在加载程序开始工作之前检查依赖关系,
  2. 您能否进入加载过程以查看正在加载的 DLL 文件

虽然我确实可以实现一个全新的加载机制(即考虑插件架构),但这远远超出了我想要完成的范围。

从目前的答案来看,1.2. 似乎是不可能的。

【问题讨论】:

  • 怎么样...检查相关可执行文件的PE?
  • 谷歌“windows show loader snaps”。适合技术人员,嗯,使用 SysInternals 的 Process Monitor 可能会更好。
  • 体育?我不确定这是什么。你能澄清一下吗?
  • @Mike Holt:您所指的帖子建议使用外部工具。理想情况下,我想在服务启动时执行检查。因此,这不是可能的重复stackoverflow.com/q/475148/949681
  • @Pressacco 每个 Windows 可执行文件在磁盘上都有一个便携式可执行文件的形式 - 检查 en.wikipedia.org/wiki/Portable_Executable

标签: c++ dll manifest dynamic-linking


【解决方案1】:

一种可能性是使您当前的服务逻辑成为一个单独的 DLL s,从驱动程序 d 加载。然后在d中,在加载s之前,动态加载s所依赖的DLL。在过去,您可以通过资源工具包中的 depends 工具 Dependency Walker 找到该集合(我认为是这样);现在它显然是通过its own web page 分发的。


请注意,当一个 DLL 被加载时,无论加载机制如何,它都会被加载。因此,当 d 随后加载 s 时,它的所有 DLL 依赖关系都得到满足。包括静态的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多