【问题标题】:Retrive list of EntryPoints in a external C++ lib?检索外部 C++ 库中的入口点列表?
【发布时间】:2014-07-16 12:02:24
【问题描述】:

我找到了软件DLL Export Viewer,它可以从 dll 库文件中检索导出函数的名称:

我想知道如何开始尝试在 VB.NET 或 C# 代码中模拟函数名检索的相同功能(我不需要检索地址),用于 C++ 库。

我要测试的 C++ dll 是 MediaInfo

谁能指导我?

【问题讨论】:

标签: c# c++ .net vb.net dll


【解决方案1】:

.exe 和 .dll 在现代 Windows 中的文件格式是 Portable Executable(最常见的 PE 或 PE32,有一个 64 位版本的格式可以更改某些数据的大小并扩展其他数据)。

有关格式的信息:
Microsoft PE and COFF Specification
An In-Depth Look into the Win32 Portable Executable File Format, Part 1
An In-Depth Look into the Win32 Portable Executable File Format, Part 2
Peering Inside the PE: A Tour of the Win32 Portable Executable File Format(搜索 PE 文件导出)
corkami Website(非常好的信息关于二进制格式的好东西)

在您的特定情况下,您对导出的数据目录感兴趣(这是保存有关二进制导出函数信息的数据结构(不仅 dll 可以具有导出函数))。该数据结构包含导出函数的总数、导出函数的地址列表、导出函数的名称(如果存在)和序号等信息......)

如果您想模仿 DLL Export Viewer 功能,您需要能够加载 PE 文件(例如:您的 .dll 文件并解析必要的数据以到达导出数据目录,例如 MZ Header ,PE Header,最后解析导出数据目录结构)。

有一个非常好的 python 库,名为 PyFile(您可以使用它,或者至少可以为您提供内部信息和检查问题的方法),还有 PeLib in C++

如果你想自己动手,你要走的路是:
-Load MZ Header(获取 PE Header 偏移)
-Load PE Header(获取导出数据目录偏移量)
-加载导出数据目录结构(获取导出函数的数量和导出函数列表的地址信息)
-循环列表加载导出函数信息(获取导出函数名称的地址)
-读名字。

【讨论】:

  • 非常感谢您的帮助,我对 PE 或 C++ 的了解非常低,所以我认为在我的情况下,最好使用 3rd 方库来获取外部函数的名称lib?,那么您可以查看这个 url,只是为了确认我是否可以使用这个 .NET 库从 C++ 库中检索名称?:hintdesk.com/net-pe-file-format-library 如果没有,您知道用于 .NET 的 PE 库吗?可以帮助我完成任务吗? PS:对不起我的英语
  • 如果您只需要导出函数的名称,您可以使用@VoidStar 注释中的代码(注意 32 或 64 位平台),您还可以检查:C# header Parser 仅解析标头,但是是一个开始。
猜你喜欢
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2019-03-10
  • 1970-01-01
相关资源
最近更新 更多