1

こんばんは

これはVC++について以前に尋ねられましたが、Solarisの回答に興味があります。

次の簡単な C コードをコンパイルしてリンクしています。

#include <stdio.h>

int main() {
    printf("Hello world!\n");
    return 0;
}

次のコマンドを使用します。

cc -o hello1 hello.c

これを数回実行して、実行可能ファイル hello2 と hello3 を取得します。これは、同じコンパイラを使用して同じマシン上で、同じディレクトリで異なる時間に行われています。

実行可能ファイルのサイズは同じですが、 diff はバイナリが異なると報告し、 cmp -l は異なる場所の長いリストで夢中になります。

実行可能ファイルを区別するためにどのccが実行可能ファイルに埋め込まれているか知っている人はいますか? タイムスタンプ?

編集: Chrisが以下で提案したように実行可能ファイルを削除すると、diffは2つの実行可能ファイルを同一として報告します。

乾杯、

4

2 に答える 2

2

2 つのバイナリで "od -c" を使用してから、side-by-side diff プログラムを使用すると、違いが何であるかがわかります。以前に Sun のコンパイラを調査したとき、通常は日付文字列でした。実行可能ファイルを削除して、違いのある ELF セクションが削除されるかどうかを確認することもできます。

于 2009-11-02T21:59:52.200 に答える
1

まったく同じソース コードを取得し、Sun のコンパイラで 2 回コンパイルすると、2 つの完全にバイナリの重複したファイルが得られることはありません。小さな違いがあります。私の知る限り、それは主に日付/時刻の問題に帰着します。

于 2009-11-06T03:13:14.397 に答える