【问题标题】:Unable to verify checksum for exe无法验证 exe 的校验和
【发布时间】:2014-09-02 18:30:11
【问题描述】:

您好,我还附加了一个 exe 和符号的故障转储。但我收到此错误:

无法验证 abc.exe 的校验和。

这是什么原因?

【问题讨论】:

  • 这是托管 (.NET) 可执行文件还是本机可执行文件?
  • executable..还有一个错误:Can't use symbol server for abc.pdb - no header information available..你能告诉我如何解决这个问题吗?

标签: windbg


【解决方案1】:

Unable to verify checksum 当 PE 标头中的校验和不可验证时发出。

如果有问题的 exe 是在未使用 /RELEASE 链接器选项的情况下编译和链接的,则可能会发生这种情况。

基于普通项目的编译链接器设置此选项。基于 nmake 或批处理文件的编译可以省略此开关并导致此输出。

一个简单的 hello world 编译和链接,使用和不使用 /RELEASE 链接器选项(PDB 不是为了简单而生成的,并且差异显示时间戳和校验和的差异)。在 WinDbg 中加载,并且仅针对 PE 标头中没有校验和的 exe 生成校验和警告。

简单的 hello world.cpp 内容

testrelease:\>dir /b & type testrelease.cpp
testrelease.cpp
#include <stdio.h>
int main (void)     {
        printf("hello my relase\n");
        return 0;
}

不使用 /RELEASE 编译

testrelease:\>cl /nologo testrelease.cpp
testrelease.cpp 

重命名 exe 并使用 /RELEASE 编译相同的源代码

testrelease:\>ren testrelease.exe testrelease_norel.exe    
testrelease:\>cl /nologo testrelease.cpp /link /release
testrelease.cpp    

比较两个 exes

testrelease:\>fc /b testrelease.exe testrelease_norel.exe
Comparing files testrelease.exe and TESTRELEASE_NOREL.EXE
000000E0: D6 CE
00000130: A3 00
00000131: 95 00
00000132: 01 00

分析比较的输出

testrelease:\>xxd -s +0x3c -l 1 testrelease.exe
000003c: d8                                       .    
testrelease:\>xxd -s +0x3c -l 1 testrelease_norel.exe
000003c: d8                                       .    
testrelease:\>echo d8 = NT_HEADER so e0 = TimeDateStamp and 130 = CheckSum
d8 = NT_HEADER so e0 = TimeDateStamp and 130 = CheckSum    

在 windbg 中加载两个 exe,只为一个没有校验和的 exe 生成警告

testrelease:\>cdb -c ".reload /f ; q" testrelease.exe      
.*** ERROR: Module load completed but symbols could not be loaded for image00400 
  
testrelease:\>cdb -c ".reload /f ; q" testrelease_norel.exe      
.*** WARNING: Unable to verify checksum for image00400000
*** ERROR: Module load completed but symbols could not be loaded for image004000

没有可用的符号头错误意味着 exe 编译时没有调试信息。

除非您在从头开始重新创建调试信息方面拥有丰富的专业知识,否则您无能为力。

上面编译的两个可执行文件都会产生错误,因为我故意没有创建调试信息。

DBGHELP: image00400000 missing debug info.  Searching for pdb anyway
DBGHELP: Can't use symbol server for image00400000.pdb - no header information available

【讨论】:

  • @MikeB xxd 是一个 commadnline hex dumper google xxd for windows 它也是 vim 编辑器 vim for windows 的一部分
猜你喜欢
  • 2020-08-11
  • 2022-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多