【问题标题】:How to determine if the application is an MFC program?如何判断应用程序是否为 MFC 程序?
【发布时间】:2023-04-06 07:37:01
【问题描述】:

我有一个编译好的 GUI 应用程序。我需要了解它是否使用 MFC 库进行编程。 Depends.exe 不返回任何对 MFC42*.dll 的依赖关系。是否有任何工具可以获取有关可执行文件的其他信息? (如果可能的话,不仅仅是库,还有正在使用的编译器等。)

【问题讨论】:

    标签: windows mfc


    【解决方案1】:

    另外请注意,MFC 应用程序可能已静态链接到 MFC 库而不是使用共享库 - 静态链接的 MFC 应用程序不会将 MFCXXX.dll 的依赖关系显示为 Depends 中的直接依赖关系。

    【讨论】:

      【解决方案2】:

      如果您关注的应用程序动态链接到 MFC,它将依赖于 MFCXX.dll,其中 XX 是版本号。例如,我们的应用程序依赖于 MFC80.dll。

      但是,如果应用程序是静态链接的,则 MFC 的所有源代码都将直接编译到应用程序中。

      【讨论】:

      • 我已经在问题中说过,它不会返回任何依赖项。而且我认为可以静态构建 MFC 应用程序。
      • 如果 MFC 静态链接到应用程序则不会。
      【解决方案3】:

      dumpbin 是您想要的工具,如果它是静态链接的。 MFC 符号往往被命名为“...Afx...”或“...MFC...”,因此如果您看到这些符号,则可能是在使用 MFC。该实用程序还可以告诉您链接器版本、为其编译的操作系统等。

      【讨论】:

        【解决方案4】:

        如果应用程序是使用 MFC 编写的,它通常由具有 类名 并以 Afx: 为前缀的窗口组成字符串。

        如果您可以访问 Spy++ 实用程序,则可以非常轻松地查询任何可执行文件的类名详细信息。

        【讨论】:

          【解决方案5】:

          您可以尝试在文件上运行 dumpbin 实用程序(SDK 或 VS 安装的一部分)。

          如果你运行“dumpbin /exports”,你可以寻找任何有说服力的 MFC-isms。我不确定是否会有,所以测试只会确认 MFC 是静态链接的,而不是反驳它。

          【讨论】:

            【解决方案6】:

            如果你可以运行应用程序,让它运行,然后使用 Sysinternals 工具ProcessExplorer 查看加载的 DLL。

            或者您是否需要一种确定应用程序是否使用 MFC 的编程方式? 此外,我有点惊讶 Depends 没有显示您的期望。将 Depends 输出与 ProcessExplorer 进行比较,看看您能学到什么。

            【讨论】:

              【解决方案7】:

              您可以检查是否有任何Standard MFC Resources 在可执行文件中。

              【讨论】:

                【解决方案8】:

                Babak Farrokhi 曾经编写了一个非常方便的小程序,名为“Language 2000”,它可以扫描 exe 以查找库和框架的二进制签名。它用于检测静态链接的 MFC 程序的两个手指。 不过,几年前我使用它时,该程序已经很旧了。您必须检查网络是否有更新的版本可用,或者签名是否仍然有效。谁知道呢!

                【讨论】:

                  【解决方案9】:

                  SysInternals(最近由 Microsoft 购买)发布取决于。无论是动态链接到 DLL 还是静态链接,您都会看到引用的导入/导出符号(可能会因 C++ 入口点签名而损坏)。

                  这个工具对于检测循环引用也非常有用(使用依赖树)。在极少数情况下,当您绝对确定您导出了入口点但链接器仍然失败时,您可以检查 DLL 以查找“缺失”的入口点。

                  还有助于发现 DLL 的隐藏秘密。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2019-01-27
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2018-02-23
                    • 1970-01-01
                    相关资源
                    最近更新 更多