这篇文章使我进入了chkmatch。在已处理的 dll 上,chkmatch 显示以下信息:
可执行文件:
时间日期戳:4a086937
调试信息:2 ( CodeView )
时间戳:4a086937 特征:0 MajorVer:0 MinorVer:0
大小:123 RVA:00380460 文件偏移:00380460
CodeView 签名:sUar
调试信息文件:
格式:PDB 7.00
结果:不匹配(原因:调试信息格式不兼容)
对预处理的 dll 使用相同的 pdb,它会报告以下内容:
可执行文件:
时间日期戳:4a086937
调试信息:2 ( CodeView )
时间戳:4a086937 特征:0 MajorVer:0 MinorVer:0
大小:123 RVA:00380460 文件偏移:00380460
CodeView 格式:RSDS
签名:(我的向导)年龄:19
PdbFile:(我的路径)
调试信息文件:
格式:PDB 7.00
签名:(我的匹配向导)年龄:19
我打开了两个版本的 dll 并转到偏移量 00380460。在原始版本中,很清楚我看到了 pdb 的名称,但在后处理版本中,该偏移量处没有 pdb 信息。我搜索了 pdb 路径并找到了完全相同的块 - 只是在不同的偏移量处。然后我对原始dll中的字节“38 00 60 04”进行了bin搜索。查看处理后的 dll 中的相同偏移量,我发现相同的字节。所以我调整了 RVA 和偏移量(通过匹配字节定位)。答对了!现在 chkmatch 报告已处理 dll 与原始文件完全相同的结果(除了我更改的 RVA 和 FileOffset)。
编辑:已确认,现在 Visual Studio 会加载引用已处理 dll 的转储符号。