5

Czy istnieje sposób na wymuszenie tego samego kodu, aby wytworzyć ten sam plik binarny w Visual C++? Wyłączyć znacznik czasu w PE lub wymusić znacznik czasu w PE, aby był on pewną stałą wartością, innymi słowy?Odtwarzanie binarne w Visual C++

Odpowiedz

3

Przypuszczam, że można napisać narzędzie, aby otworzyć PE, ustawić sumę kontrolną na 0, ustawić znacznik czasu do tego, co lubisz, przeliczyć CRC, a następnie napisać z powrotem. Byłoby miło, gdyby istniał oficjalny sposób na zapewnienie doskonałej odtwarzalności binarnej.

Aby uzyskać więcej informacji: http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

3

To nie tylko datownik - jest wbudowany GUID służy do dopasowywania PDB - jako John Robbins explains.

Nawet poza tym, tam po prostu nie sposób zmusić kompilator do generowania spójnych wyników, jak Jim Griesmer explains -

twórcy kompilatora są znacznie bardziej zainteresowani w tworzeniu poprawnie kod działa i generuje go szybciej niż zapewnienie, że wszystko, co jest generowane, jest ułożone identycznie na dysku twardym. Ze względu na liczne i różnorodne metody i implementacje do optymalizacji kodu, zawsze jest możliwe, że jedna kompilacja zakończyła się z nieco dłuższym czasem na zrobienie czegoś dodatkowego lub innego niż inna kompilacja. Tak więc końcowym wynikiem może być inny zestaw bitów dla tej samej funkcjonalności.

Zatem, funkcji i kolejność przekroju są nie zagwarantowane stale tylko w otrzymanej PE. Przykład znajduje się pod linkiem.