19

我正在尝试使用 JetBrains dotPeek 1.4 符号服务器,但是我遇到了一些失败的第 3 方程序集,dotPeek 状态为:

Pdb has not been generated because assembly does not contain debug directory

使用 CFF Explorer 我发现这些程序集具有空的“调试目录”可移植可执行文件 (PE) 标头值。

是否有一种(简单的)方法来编辑 PE 以添加调试目录标头值?

4

1 回答 1

6

de4dot 在 dotPeek 眼中创建了无效的 .net 可执行模块。然而,这是 dotPeek 的问题,而不是 de4dot 的问题。但是由于我们没有 dotPeek 的来源,我们应该修改 de4dot 来实现互操作性。修改:de4dot.code/AssemblyModule.cs 模块添加

writerOptions.WritePdb = true;
module.CreatePdbState();

到 de4dot.code.AssemblyModule.Save 函数,你在 exe 模块中填充了有效的 pdb 函数。

为了节省您的时间,您可以在我的补丁中使用 de4dot 项目:https ://github.com/earnol/de4dot/commit/24c6e696fb9251f7d048ac33c88c710013a649d6 它会将调试目录添加到输出可执行文件中。只需删除生成的 PDB 并再次运行 dotPeek。它将完美无缺地工作。使用类似:de4dot.exe -f filein.exe -o fileout.exe -fpdb

于 2015-10-25T17:31:28.377 回答