在命令行上从本机 .DLL 转储函数字节

问题描述

我想在 DLL 中列出所有导出的函数并转储它们的字节。使用 dumpbin 包中的 rabin2radare2 列出所有导出非常简单。我还找到了一种使用 dumpbin 反汇编整个 DLL 的方法,但无法在转储中查看函数边界。

我正在寻找一种反汇编(使用字节)的方法,或者理想情况下只是转储 DLL 中特定或所有函数的字节。如果输出中有一些其他信息,我不介意解析输出。我已经尝试了所有工具的孩子,但到目前为止我无法实现我所需要的。

可能的方向之一是编写脚本 radare2 来做到这一点。

解决方法

为了转储函数的字节,您必须知道该函数在哪里结束。
您可以进行一些可能有效的静态分析,也可以执行以下操作之一:

对于 64 位可执行文件,您可以解析包含 RUNTIME_FUNCTION 列表的 .pdata 部分。 DUMPBIN 可以使用 class test: def __init__(self,arr1,arr2): for i,x in enumerate(arr1): setattr(self,str(x),array2[i]) /unwindinfo 选项执行此操作。
请注意,这可能不包括每个导出的函数,请参阅参考。

第二个选项,适用于 32 位和 64 位可执行文件,是利用 DIA SDK
(见IDiaSymbol::get_length)。这应该涵盖所有导出和非导出的函数,但要求您有权访问可执行文件的 .pdb 文件。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...