手抜きOS Windows 10 Part250 / 内部のタイムスタンプはdeterministic値なのが判明
手抜きOS Windows 10 Part249 / 最近のWindows 10のLink 日時は変
この件調べてみたんですが情報がありました
TimeDateStamp of IMAGE_FILE_HEADER in PE Header is not right? · Issue #8600 · dotnet/sdk · GitHub
-deterministic - Visual Basic | Microsoft Learn
なんか、同一のソースコードからは同一のバイナリしか出力できなくするモードがあって、それが既定で有効になったんだとか。
何でそんなことしてるの?
Why are the module timestamps in Windows 10 so nonsensical? - The Old New Thing
と思ったらコラムがあった。
「タイムスタンプの使用目的は、バインドされたインポートを信頼すべきかどうかを判断するためにモジュール ローダーによって使用されるものなので、再現可能な一意の ID としてハッシュを使う事にした。」
なんて書いてますね。
でも、インポートテーブルって、バイナリレベルで異なっていても実は、インポート関数のアドレスが一致していれば問題ないんですよね。
拡張カーネルで、バイナリ弄ったファイルを公開した時、リンク日時をそのままにしておいたら、プログラムがクラッシュすることがあったのはこれが原因だったりします。パフォーマンスを高めるために、バインドを解除したくないからタイムスタンプを変更しない事例はたしかにあるんですが、タイムスタンプがこれによって不正確な事例があるから、ここをファイルの識別IDに使用することにしたって設計思想が滅茶苦茶ですな ・ω・
Comments