Подписание кода на исполняемый файл или DLL не влияет на заголовок отладки исполняемого файла. Таким образом, он все равно будет соответствовать PDB.
...\SigningPdb\bin\Release>symchk signed.exe /s .
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1
...\SigningPdb\bin\Release>symchk unsigned.exe /s .
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1
И
...\SigningPdb\bin\Release>ChkMatch.exe -c signed.exe SigningPdb.pdb
ChkMatch - version 1.0
Copyright (C) 2004 Oleg Starodumov
http://www.debuginfo.com/
Executable: signed.exe
Debug info file: SigningPdb.pdb
Executable:
TimeDateStamp: bc78c18e
Debug info: 2 ( CodeView )
TimeStamp: a7b373e5 Characteristics: 0 MajorVer: 0 MinorVer: 0
Size: 97 RVA: 000026a0 FileOffset: 000008a0
CodeView format: RSDS
Signature: {b8ed520c-cdfc-486b-8e1a-7c0752a2a41f} Age: 1
PdbFile: ...\Release\SigningPdb.pdb
Debug info: 16 ( Unknown )
TimeStamp: 00000000 Characteristics: 0 MajorVer: 0 MinorVer: 0
Size: 0 RVA: 00000000 FileOffset: 00000000
Debug information file:
Format: PDB 7.00
Signature: {b8ed520c-cdfc-486b-8e1a-7c0752a2a41f} Age: 1
Result: Matched
Метка времени находится в заголовке COFF. Этот заголовок имеет размер всего 24 байта и не изменится во время подписания кода.
Большинство изменений произойдет в новом разделе для сертификатов. Этот раздел, однако, также будет игнорироваться при подписании кода. В противном случае вторая подпись уничтожит первую подпись. (Кстати: этот раздел использовался для переноса вредоносного кода внутри подписанного исполняемого файла)
Конечно, «обычные» контрольные суммы, которые не учитывают структуру файла EXE / DLL, сообщат о другой контрольной сумме.
Что могло случиться с вашей DLL или EXE?
- вы случайно восстановили его, поэтому отметка времени вашей DLL больше не соответствует PDB
- вы используете аспектно-ориентированное программирование (AOP) в .NET, и после перестройки происходит переплетение кода. Эти инструменты не смогут восстановить PDB после переплетения, поэтому несоответствие PDB уже существует до того, как DLL будет подписана кодом.