2010-07-08 20 views
5

Windows'taki kaynak kodu ikili hakkında bir sorum var.Aynı basit kaynak kodu, Windows 2 üzerinde farklı ikili dosyalar

#include <stdio.h> 

int main() 
{ 
    printf("Hello, world!\n"); 

    return 0; 
} 

aynı kaynak kodu, Windows (VS 2008 Cmmand İstemi: "CL") iki kez derlenmiş ama farklı ikilileri var.

cl new.cpp 

Bunun nedenini ve nasıl önleneceğini söyleyebilir misiniz?

+1

görün kurar http://stackoverflow.com/questions/1221185/ Aynı-build-on-farklı-sistemleri ve http://stackoverflow.com/questions/1277877/gcc-compiled-binaries-w-different-sizes - temelde hiçbir derleyici garantileri çiftleri aynı olacaktır. –

+1

Aynı olması için ikili dosyalara neden ihtiyaç duyuyorsunuz? – jalf

cevap

4

Zaman damgası, PE biçiminin bir parçasıdır. Sürüm olarak derleme veya derleme yapmadan bağımsız olarak her zaman farklı değerler alırsınız.

+0

Bunu nasıl önleyebilirim? Zaman damgasını kaldırmak mümkün mü? Çünkü Linux'ta g ++/gcc kullanırsam, son ikili dosyalar aynıdır. –

+2

@Peter: ELF (Linux'un yürütülebilir biçimi) bir zaman damgası alanına sahip değil. Çıkışın farklı olması neden önemlidir? –

+0

@Billy: ELF'nin zaman damgası alanına sahip olmayabileceği konusunda haklısınız. Bu aynı kaynak kodu farklı ikili dosyaları çok can sıkıcı. –

1

Sürüm olarak derlediniz mi? Hata ayıklama, derleme başına exe değerini değiştirebilecek zaman damgaları vardır.

+0

Yukarıda belirtilen şekilde derleme tam olarak 1 baytlık bir fark yaratmıştır. Gömülü zaman damgasının LSB'si. – mocj

1

Ben googled ve bir orta yollu çözüm buldu: Aynı projenin ikili görüntülerini karşılaştırmak nasıl

DUMPBIN /RAWDATA MyApp.EXE > first.txt 
DUMPBIN /RAWDATA MyApp.EXE > second.txt 

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

+0

Ayrıca, her iki yürütülebilir dosyada zaman damgasını aynı değere ayarlayarak da çalışabilirsiniz. –

İlgili konular