当前位置:  开发笔记 > 开发工具 > 正文

剥离Windows DLL调试信息?

如何解决《剥离WindowsDLL调试信息?》经验,为你挑选了2个好方法。

我通常不会在Windows开发上工作,并且完全不熟悉工具链和构建系统.我的嵌入式产品包括来自其文件系统中第三方的一些Windows DLL(由安装文件系统的Windows机器使用).

我有一个问题:与以前的版本相比,这些DLL的最新版本大小增加了三倍,并且它们不再适合文件系统.DLL的功能没有太多变化,所以我怀疑开发人员只是忘了在这个drop中删除调试符号.我会问他们,但由于时区和语言差异,得到答案通常需要几天时间.

有人可以解释一下,对于不熟悉VisualC的人使用简单的步骤,如何确定DLL是否仍然包含调试信息以及如何将其删除?



1> Greg Hewgill..:

通常,调试信息本身是作为单独的*.pdb文件(Program DataBase)构建的,而不是像在unix中一样附加到二进制文件中.如果开发人员确实构建了库的调试版本,则更严重的问题可能是依赖关系.如果二进制文件的发布版本链接到MSVCRT.DLL,则调试版本将链接到MSVCRTD.DLL(其他运行时库类似地用D后缀命名).要查找特定二进制文件的依赖项,请尝试:

dumpbin /imports whatever.dll

这将显示库的所有运行时依赖项whatever.dll(请注意,列出了这些库中的库名称和符号).如果您没有看到所期望的依赖项列表,则可能只有原始开发人员以正确的构建模式重建库才能解决该问题.



2> Chris Becke..:

Rebase是微软工具集的一部分.除了设置dll的基址之外,它还可以将任何附加的调试信息删除到单独的.dbg文件中.

rebase -i 0x10000000 -a -x.\ -p

理论上,您应该尝试确定dll是否已构建到唯一的基址并使用它.或者,选择一个基址来最小化与应用程序使用的任何其他dll发生冲突的可能性,以便Windows在加载时不必修补dll.在一个加载器通常将模块的加载地址随机化为安全特征的时代,我不确定它是否值得特别设置基址的麻烦.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有