在不重新编译的情况下将导出添加到 DLL

Adding an export to a DLL without recompiling it

我有一个想要 use/debug 的 DLL。我没有消息来源。

用 IDA 查看它,我发现了 3 个东西:

  1. DllMain 什么都不做
  2. 我需要的代码自包含在一个函数中,该函数只调用了几个 Windows API。它不引用该 DLL 中的任何其他内容。
  3. 该自包含函数导出

我可以提取汇编代码并将其 link 到 C 程序中,但我想知道:

是否可以(以及我应该如何)将条目添加到现有 DLL 的导出 table 而无需重新编译它?

是的,您可以这样做,但大多数工具不支持此操作。例如,使用 CFF Explorer,可以更轻松地将现有导出转换为您想要的内容。只需编辑函数 RVA 和导出名称。由于您只需要一件事,因此删除其他一些导出应该不是问题。

您甚至可以使用十六进制编辑器完成此操作,因为它不涉及移动任何内容来重建 header,它只是一个 in-place 编辑。