我有一个20多岁的.dll
,用C语言编写,我的同事都不想触摸。有充分的理由,它使用宏,宏常量和无处不在的铸造,使符号表非常精简。
不幸的是,我有时必须调试这段代码,这让我很生气,因为它没有使用像enum
那样简单的东西,它会将符号放在.pdb
文件中以便进行调试更容易一点。
我很乐意将部分#define
转换为enum
s,即使我尚未更改变量类型,但我们真的担心它会导致可能的问题在性能方面,如果要改变生成的代码。
我需要明确地表明,不会发生编译代码更改,但似乎.dll
实际上在64位版本中发生了显着变化。我查看了函数的一个反汇编代码,它似乎没有受到影响,但我需要显示二进制文件中的内容是什么,不是在更改,以减轻我的同事的恐惧以及我自己的一些惶恐,加上困惑为什么任何更改都会传播到.dll
,尽管.dll
的大小相同。
有谁知道我怎么能这样做?我曾尝试使用dumpbin
,但我对它并不熟悉并且得到了一些混合的结果,因为我不像我喜欢的那样理解输出。
答案 0 :(得分:0)
我这样做的方式如下:
for a in Release-without-enum/*.asm; do
git diff --no-index --word-diff --color -U10000 $a "Release-with-enum/$(basename $a)";
done | less -R
-U10000
只是为了让我可以看到每个文件的整个文件。如果您只想查看更改,请将其删除。
这将列出生成的汇编代码中的所有修改。
发现的变化如下:
2和3似乎是由损坏的.pdb
错误引起的。这可能是由于在同一解决方案中的多个项目中使用了文件。重建整个解决方案解决了这两个问题。