【问题标题】:Error 0xc000007b When trying to inject a DLL with detours尝试通过绕道注入 DLL 时出现错误 0xc000007b
【发布时间】:2013-10-13 18:11:01
【问题描述】:

我正在尝试使用最新的 32 位 Detours 库将 DLL 注入新进程。

http://research.microsoft.com/en-us/projects/detours/

过去它对我有用,但在更改 DLL 后,它停止对所有进程工作。当我恢复该过程时,我会收到一个消息框,上面写着

应用程序无法正确启动 (0xc000007b)。单击确定关闭应用程序。

我已经使用注入的普通空 DLL 重新创建了它,该 DLL 除了 kernel32.dll 之外没有任何依赖项。与其他可执行文件完美配合。

知道为什么会发生这种情况吗?

【问题讨论】:

    标签: windows code-injection 32-bit detours


    【解决方案1】:

    原来问题在于我使用 Detours 注入的 DLL 确实有任何导出。添加虚拟导出后,一切正常。

    【讨论】:

    • 呃,等等,所以这对很多进程都有效,除了一个?这个答案当然可能不正确。异常 0xc000007b 几乎总是一个进程位数问题。就像尝试将 32 位 DLL 注入 64 位进程一样。
    • @HansPassant 经过一番检查,结果发现它实际上在任何过程中都不起作用:) 我已经相应地编辑了问题。 0xc000007b 是一般加载程序错误,最可能的原因是位数。我的猜测是,如果注入的 DLL 没有看到任何导出,它会在新进程中搞砸一些东西,从而给加载程序带来麻烦。
    • 非常有用的答案,因为这正是我在检查了所有其他事情后遇到的
    【解决方案2】:

    我不知道您遇到此问题时的文档是什么样的,但基于虚拟导出显然可以解决该问题和当前文档,您可能错过了Detouring 32-bit and 64-bit Processes 中所述的一些要求。不幸的是,它说做事没有解释这些部分是如何组合在一起的。

    Detours 期望您的辅助 DLL 以序号 1 导出 DetourFinishHelperProcess。这不是您自己定义的函数。由于在DllMain 函数中调用DetourIsHelperProcess,它将被编译到您的DLL 中,如Using Detours 示例所示。

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多