分析.exe/.dll(Windows PE)文件以获取代码膨胀

kiz*_*zx2 7 windows performance diagnostics low-level dumpbin

假设我有一个包含十几个不同模块的项目,它们生成一个结果DLL,我该如何分析它以便我可以识别每个模块/函数所贡献的实际文件大小?我知道在Release版本中可能无法删除大量信息,但是如果我拥有完整的源代码并且可以执行Debug构建怎么样?

另外,如果在某处定义了大的静态变量,有没有办法可以轻松找到它们?

奖金问题:Linux ELF文件怎么样?

Ric*_*son 5

每当涉及到识别膨胀时,通常就从Windows 上的dumpbin开始。通常,通过编写工具通过转储检查每个对象模块,然后分析输出。它往往是一个反复的过程,可能会花费大量时间。

对于使用PDB的调试版本,Sizer可以生成有用的报告。

Adrian在这里提供了一些有用的指导。最大限度地减少代码膨胀,以实现更快的构建和更小的可执行文件,并使用一个称为SymbolSort的工具来提供帮助。C#中的源代码包含在SymbolSort中,因此如果SymbolSort没有帮助,则可能是一个不错的起点。

对于ELF,nmobjdump的输出是一个很好的起点。