如何解释 ProcessHacker 中导出选项卡中的条目

逆向工程 dll 图书馆 进程黑客
2021-06-27 20:09:35

我使用ProcessHacker 2.33 版来检查正在运行的进程中由 DLL 导出的函数。在下面的屏幕截图中,您可以看到一些从 C++ 应用程序导出的函数,以及它们的序数和虚拟地址 (VA):

在此处输入图片说明

这是 ProcessHacker 的一个非常酷的功能,我在 ProcessExplorer 中找不到。但是,关于您可以在此屏幕截图中看到的条目,我无法找到?(问号)和函数名称前缀的数字是什么意思。另外,我不确定@名称中的单双(at) 符号后跟一组大写字母或数字是什么意思。

问题1:符号( ?, @)、数字前缀和大写字母后缀分别代表什么?如何解释它们?

问题2: “Ordinal”栏是什么意思?

问题 3: “VA”列是否显示了过程入口点相对于.textDLL 段的基地址的偏移量如果不是,它代表什么?

问题 4:如何从“导出”选项卡计算任何函数的绝对地址?

2个回答

那些是 C++ 名称装饰。

名称修饰通常是指 C++ 命名约定,但也适用于许多 C 情况。默认情况下,C++ 使用函数名称、参数和返回类型为函数创建链接器名称。

有关详细信息,请参阅MSDN 上的名称装饰

问题 2:序数只是另一种进行导出的方式。您可以按名称或按顺序导出函数。它仅在该二进制文件中是唯一的。使用GetProcAddress()可以通过序号获取函数,就像使用名称一样。

我可以推荐“Windows via C/C++”一书,了解有关这些机制的更多详细信息。

我建议将 dll 文件加载到 PE Explorer (View->Export) 中,这将为您取消修饰名称并向您显示相应的参数/返回值/调用约定。

您可能还想查看这个问题