私たちの夜間のビルド プロセスは、対応する画像ファイルとは数時間異なる PDB ファイルを生成するなど、長い間機能していませんでした。その後、問題を修正しました。
ただし、シンボル サーバーの使用を開始したいのですが、これらの年齢が一致しない pdb ファイルを使用する必要があるため、使用できません。この問題を回避するには、windbg で .symopt +0x40 メソッドを使用します。つまり、すべての pdb ファイルを手作業で整理する必要があり、何年にもわたるリリースの後、それが積み重なっていきます。
windbg が pdb の経過時間をマークするために使用するメカニズムを変更し、強制的にイメージ ファイルと一致させる方法を探しています。ユーティリティChkMatchは同様のことを行いますが、pdb 署名用です。開発者はページで「ChkMatch は、実行可能ファイルと PDB ファイルの署名が異なるが同じ年齢である場合、それらを一致させることができます (PDB 署名と年齢の詳細については、この記事を参照してください)。年齢が異なる場合、ツールは作成できません。ファイルが一致します。」
hexeditor の内部を調べたところ、年齢に対応するビットのように見えるものさえ見つかりましたが、動作させることができなかったので、内部でさらにいくつかのトリックを引き出す必要があります。
何か案は?
編集:これが役立つかどうかはわかりませんが、私の特定のケースでは、PDBファイルも再作成する不要なdllの再リンクによって年齢差が発生しました。ただし、ビルド プロセスでは、元の dll (再リンク前) と再リンク後の pdb が格納されていました。そういう状況をどうにか手で再現しようと思いました。つまり、DLL の再リンクを強制しますが、どちらの場合も pdb を保存します。次に、2 つのファイルのバイナリ比較を実行して、それらがどのように変更されたかを確認できます。おそらく、これを自動的に行う何らかのパッチソフトウェアを実行しますか? コントロール ケースで正確に何が変更されたかを確認することで、会社のビルド プロセスで保存された DLL と PDB に同じことを行うことができるでしょうか?
編集:私はそれを理解しました!!!! 最初の回答に対するコメントの 1 つを参考に、「文書化されていない Windows 2000 の秘密: プログラマーズ クックブック」という書籍の PDF へのリンクを調べました。また、著者は pdb ファイル形式について詳しく説明しています。前に言ったように、私はすでに pdb を 16 進エディタにロードしており、年齢と署名を一致させたように見えるようにいくつかのビットをひっくり返しましたが、うまくいきませんでした。さて、W2k secrets book のユーティリティを使用して pdb を含まれているストリームに「爆発」させた後、ストリーム 3 に age への別の参照が隠されていることがわかりました!!!!!!!! それもひっくり返したら、windbgで一致しました。これは巨大です!!!! どうもありがとう....シンボル サーバー HERE I COME!