5

バイナリ/ソース コードの検証の目的で、同じコンピューターで 2 週間間隔で 2 つのコンパイルを行い、バイナリを同一にして、チェックサム テストに合格できるようにしたいと考えています。

これまでのところ、コンパイラによってタイムスタンプがバイナリに書き込まれる可能性が最も高いことがわかりました。この msdn の記事に従って、dumpbin /rawdata の結果を比較することで、これを回避できます。

http://support.microsoft.com/kb/164151

ただし、ダンプビンの結果は依然として約 10 か所で異なり、たとえば、何らかのタイムスタンプ (A1 73 から C4 76 への変更) のように見えます。

これは、デルファイ コンパイラがコード/データ セクションに入れているタイムスタンプだと思いますが、これがどこで発生しているのか、またはオフにする方法がわかりません。さまざまなコンパイラ/リンカー オプションをいじっても、この動作は変わりません。

どんな助けでも大歓迎です。

4

3 に答える 3

1

私たちは数年前にこの質問を調査しましたが、その答えは単純に、Borland/Codegear/Embarcadero の人々は、コンパイラがまったく同じ入力に対してまったく同じ出力を生成する必要があるという考えに同意していないというものでした (現在の日付/時間は入力と見なすことはできません)。

これは残念なことですが、Delphi のメジャー バージョンが 10 年以上古いことを考えると、おそらく変わらないでしょう。

于 2009-12-03T02:35:56.737 に答える
1

質問のコメントに基づいて、この質問に対する答えを探していると思います。

特定のバイナリが特定のソース ファイル セットによって作成されたことを確認する方法

1 つの方法は、次のような自動化されたビルド プロセスを使用することです。

  1. ソース コードに一意の検証タグを挿入します (インクルード ファイル内の GUID 文字列またはその他のものと同じくらい単純な場合があります)。
  2. その検証タグを使用してバイナリをコンパイルします
  3. 結果のバイナリとソース コードを配信ディレクトリ ツリーにパックします。

ソースコードが実際にその検証タグを使用していることを確認する必要があります (たとえば、about ボックスに表示するなどして)。

私はFinalBuilderを使用して、このようなビルド プロセスを自動化しています。

--jeroen

于 2009-12-02T11:06:18.483 に答える
0

残念ながら、私はこの問題に対する答えを聞いたことがありません。

これはタイムスタンプだけでなく、メモリから数バイトのランダムなガベージが結果として生じる場所があります。

于 2009-12-01T23:33:47.780 に答える