【问题标题】:Get functions of a Windows executable获取 Windows 可执行文件的功能
【发布时间】:2013-02-20 19:39:48
【问题描述】:

我正在寻找从 Windows 程序集(exe、dll、ocx)中检索函数枚举的解决方案。我相信 WMI 中有一些工具,但我找不到。它必须接近.NET的System.Reflection功能,但我需要独立分析Windows可执行平台,并且System.Reflection仅适用于.NET应用程序。

【问题讨论】:

  • 您想要程序化解决方案吗?还是垃圾箱就够了?
  • 即使能拿到函数,也不知道怎么调用,所以信息用处不大。
  • 致 DAVID:是的,我需要编程解决方案,它可以从 LAN 中的远程机器获取所有可能的 Windows exe 文件的签名功能。
  • 致 RAYMOND:我不需要调用它们,只需调用函数名称和签名

标签: .net windows reflection executable


【解决方案1】:

反射是某些语言的一个特性。一般的可执行文件或二进制文件可能不包含(很多)内部函数的信息。

PE 格式的二进制文件确实列出了导出的函数(尽管不一定按名称)。您可以使用 Visual Studio 附带的名为 dumpbin 的命令行工具查看这些内容。例如,dumpbin /exports 将列出导出的函数。

【讨论】:

  • dumpbin 工具仅检索函数名称。如果我需要方法的完整签名怎么办?另外,不确定它是否适用于远程机器(在本地以太网内)
  • 您需要的可能无法实现。大多数二进制文件不包含函数签名或其他符号信息。如果您有与二进制文件对应的 .pdb 文件,则可以使用 dbghelp 库来查询它们以获取符号信息。
  • 我已经阐明了要求:目标是 VC++ MFC 可执行文件。该平台是否有任何程序化(例如 WinAPI 或 WMI)?
  • 您可以继续询问,但这不会改变答案:大多数二进制文件都没有您想要的信息。所以,不,没有 API 可以提取不存在的信息。
【解决方案2】:

如果您想要完整的签名信息,这些是您的选择。

  • 托管:您可以使用反射
  • COM:一些导出 COM 对象的二进制文件将支持IDispatch,这将允许您查询公开的 API。
  • 对于其他所有内容,您必须转到调试符号。如前所述,二进制文件不需要存储签名数据,因此它们不会保留它。您可以使用DIA SDK 查询 .PDB 文件,但请记住,大多数开发人员不会提供完整的符号文件。
  • 如果您没有符号,那么任何导出函数的名称都是您将获得的最接近的东西(并且正是当符号不可用时调试器依赖的名称)。要以编程方式访问它,请参阅PE COFF 规范。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多