You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对比内存转储校验和与源文件?WinDbg校验相关咨询

WinDbg校验和相关问题解答

关于WinDbg的默认校验行为

WinDbg加载无校验和(未用/RELEASE链接)的模块时弹出的警告,仅为提示模块缺少官方校验和,默认并不会自动执行校验和对比——这是出于调试效率考虑,毕竟开发阶段频繁修改代码重编译是常态,强制校验会打断调试流程。你移除函数重编译后无报错,就是因为这个默认逻辑。

获取存储的校验和

1. WinDbg内置命令

使用!dh <模块基址>命令,在输出的PE头信息中找到CheckSum字段,这就是PE文件头里预存的校验和。如果不知道模块基址,可先用lm命令列出模块,找到对应模块的基址后再执行!dh。

2. Windows API实现

  • 直接读取PE头:通过ImageNtHeader函数获取PE可选头指针,读取IMAGE_OPTIONAL_HEADER.CheckSum字段即可拿到存储的校验和。
  • 借助CheckSumMappedFile函数:该函数不仅能计算文件的校验和,还会通过输出参数返回PE头中已有的校验和值。

执行校验和对比

1. WinDbg内置命令

使用!chkimg -v <模块名>命令,WinDbg会计算目标模块在当前内存中的实际校验和,并与PE头存储的校验和对比,输出两者的差异(若存在)。

2. Windows API实现

调用CheckSumMappedFile计算目标文件/内存映射区域的实际校验和,再与从PE头读取的存储值做直接对比,即可完成校验。如果是内存中已加载的模块,需先将模块内存区域映射为文件视图,再传入该函数计算。

内容的提问来源于stack exchange,提问作者T.D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:04:05