SORU
4 EYLÜL 2015, Cuma


Neden'sadece yorumlar farklı program iki ikili t tam olarak gcc ile uyumlu olur?

İki C Program oluşturdum

  1. Program 1

    int main()
    {
    }
    
  2. Program 2

    int main()
    {
    //Some Harmless comments
    }
    

Derleme AFAIK, derleyici(gcc) Yorum yok sayıp whitepaces yedek gerekir, ve bu nedenle çıkış benzer olması gerekir.

Ama çıkış ikili md5sums kontrol ettiğimde, onlar uyuşmuyor. Ben de optimizasyonu -O3 -Ofast ile derleme çalıştı ama onlar hala eşleşmedi.

Burada neler oluyor?

EDİT: komutları ve orada tam md5sums(t1.c program 1 ve t2.c program 2)

gcc ./t1.c -o aaa
gcc ./t2.c -o bbb
98c1a86e593fd0181383662e68bac22f  aaa
c10293cbe6031b13dc6244d01b4d2793  bbb

gcc ./t2.c -Ofast -o bbb
gcc ./t1.c -Ofast -o aaa
2f65a6d5bc9bf1351bdd6919a766fa10  aaa
c0bee139c47183ce62e10c3dbc13c614  bbb


gcc ./t1.c -O3 -o aaa
gcc ./t2.c -O3 -o bbb
564a39d982710b0070bb9349bfc0e2cd  aaa
ad89b15e73b26e32026fd0f1dc152cd2  bbb

Ve evet, md5sums maç aynı bayrakları ile birden çok derleme karşısında.

Benim sistem BTW gcc (GCC) 5.2.0 Linux 4.2.0-1-MANJARO #1 SMP PREEMPT x86_64 GNU/Linux

CEVAP
4 EYLÜL 2015, Cuma


Dosya isimleri farklı dizeler çıktı aynı olmasına rağmen). Dosyayı kendisi (yerine iki dosya olması) değiştirmeye çalışırsanız, çıkış ikili artık farklı olduğunu fark edeceksiniz. Hem Jens, GCC dökümleri oluşturur ikili meta verileri bir sürü çünkü dedim, including the exact source filename (ve AFAİCS çok çınlama yapıyor).

Bunu deneyin:

$ cp code.c code2.c subdir/code.c
$ gcc code.c -o a
$ gcc code2.c -o b
$ gcc subdir/code.c -o a2
$ diff a b
Binary files a and b differ
$ diff a2 b
Binary files a2 and b differ
$ diff -s a a2
Files a and a2 are identical

Bu md5sums yapılar arasındaki değişmez açıklıyor, ama farklı dosyalar arasında farklıdır. Eğer isterseniz, Jens önerisi ne ve dosya ikili gömülü olduğunu fark edeceksiniz her bir ikili için strings çıkış karşılaştırabilirsiniz. "Eğer" bu, 14 ** ikili dosyaları ve meta verileri kaldırılır: . düzeltmek isterseniz

$ strip a a2 b
$ diff -s a b
Files a and b are identical
$ diff -s a2 b
Files a2 and b are identical
$ diff -s a a2
Files a and a2 are identical

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • monkophile

    monkophile

    25 Temmuz 2007
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006
  • UlyssesForever's channel

    UlyssesForev

    28 ŞUBAT 2012