【问题标题】:Finding Dll Function Parameters查找 Dll 函数参数
【发布时间】:2008-11-15 05:15:21
【问题描述】:

如何找到未记录的 Dll 函数的参数?

我在整个互联网上搜索并最终找到了一种方法:它涉及装饰功能。但是,我找不到获得这些的方法。

我们将不胜感激。

【问题讨论】:

    标签: function dll parameters name-decoration


    【解决方案1】:

    正如 Paul 所说,您需要使用 IDA Pro(或相同的免费版本)之类的工具来反汇编应用程序。

    一个很好的介绍性资源是 Wikibook,x86 Disassembly。具体来说,请查看functions and stack frames 部分。对于采用一些标准类型参数的简单函数,推导函数参数可以很简单。

    开始做这类事情的最佳方法可能是创建一个小型测试 DLL,创建一些具有已知参数的函数,然后反汇编您的 DLL 以查看模式。从你自己的函数中学习反汇编(你有源代码并且知道完整的签名),而不是一头扎进反汇编第三方的东西。

    【讨论】:

    • Hrm.... 根据我的回答:P(开玩笑的,好吧;),无论如何你根本不需要反汇编,在诉诸于此之前,你可以更快地获得更准确的信息,在事实上,这是我建议的步骤之后的最后可能的手段。
    【解决方案2】:

    我做了一个相当深入的回答 here,ReactOS 是你最好的选择,看起来又是这样,每个人这里有点离谱。

    我会强烈反对尝试反汇编系统 DLL。

    MUCH 更具冒险精神(我不相信从事物的外观讨论到目前为止),技术是枚举 PDB 的内容。

    PDB 文件是您可能知道的调试符号,但是,由于反垄断法庭案件的行动,Microsoft 需要发布大量未记录的信息。

    大量 Windows API 的完全准确、可用和更新的信息通过 PDB 文件记录。调用约定、参数计数甚至参数类型和名称都记录在案(当然没有关于使用的细节:)。

    查看 DIA SDK,dia2dump 是与 Visual Studio 一起分发的一个很好的示例,为了进一步调查,它还提供了一个取消装饰函数的解决方案,专门针对您的问题。

    此外,kernel32 提供了 UnDecorateSymbolName,因此如果您不想链接到调试 sdk 库,也可以使用它。

    【讨论】:

      【解决方案3】:

      做到这一点的唯一方法是反汇编函数并查看它如何使用寄存器和堆栈。 IDA Pro 是执行此操作的最佳工具,但它并非易事。

      【讨论】:

        【解决方案4】:

        是COM Dll吗?如果是COM Dll,则注册它,使用OLE 视图了解接口和参数。

        【讨论】:

          【解决方案5】:

          首先,下载Dependency Walker 并在其中打开您的DLL。您将看到导出和导入的符号。如果您的函数名称看起来像 _MyFunction - 它是“C”风格(未装饰)并且您与它没有太多关系(可能如前所述进行反汇编)

          如果它更像 ?_MyFunction@LoNgSetOfSome@_StrangeChAracTers 它是 C++ - 已装饰,您可以尝试使用来自 here 的 {非官方} 信息“取消装饰”它

          【讨论】:

          【解决方案6】:

          如果您拥有的唯一信息是未修饰的函数名称,那么很遗憾,仅凭此信息无法推断出函数参数。

          如果您擅长汇编,则可以反汇编函数的机器代码并对其进行逆向工程。但除了最简单的功能之外,这对于所有功能来说都很难做到。

          【讨论】:

            【解决方案7】:

            我不太熟悉 Windows 使用的 PE 格式,但我很确定没有真正简单的方法可以做到这一点。如果符号表没有被剥离,您可能会找到一些信息(不确定 Windows 如何在 PE 中存储调试信息),但它几乎肯定不会帮助您处理参数类型。最好的办法是将 DLL 加载到调试器中并进行试验……监控堆栈帧上的原始内存,发送各种变量类型等。

            即使你在 PE 文件中找到了很好的调试信息资源,也几乎肯定不会有任何私有函数的信息。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-03-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-05-25
              • 2011-03-14
              相关资源
              最近更新 更多