BerandaComputers and TechnologyMengapa stempel waktu modul di Windows 10 sangat tidak masuk akal?

Mengapa stempel waktu modul di Windows 10 sangat tidak masuk akal?

Raymond Chen

Raymond

Salah satu kolom di header Portable Executable (PE) disebut TimeDateStamp . Ini adalah nilai 32-bit yang mewakili waktu file dibuat, dalam bentuk detik sejak 1 Januari 1970 UTC. Tapi mulai di Windows 10, cap waktu itu semua tidak masuk akal. Jika Anda melihat stempel waktu dari berbagai file, Anda akan melihat bahwa file tersebut tampak seperti nomor acak, sama sekali tidak terkait dengan stempel waktu mana pun. Apa yang sedang terjadi?

Salah satu perubahan pada sistem rekayasa Windows yang dimulai pada Windows 10 adalah perpindahan ke build yang dapat direproduksi . Artinya, jika Anda memulai dengan kode sumber yang sama persis, Anda harus menyelesaikannya dengan kode biner yang sama persis.

Ada banyak hal yang menghambat reproduktifitas. Salah satu sumbernya adalah bahasa itu sendiri. Misalnya, ruang nama anonim mungkin tidak memiliki nama yang dapat diakses secara terprogram, tetapi karena objek di dalamnya memiliki tautan eksternal, mereka tetap harus memiliki nama, dan namanya harus berbeda untuk file sumber yang berbeda. Bagaimana cara memastikan bahwa namanya unik? Apakah kompilator menggunakan generator bilangan acak untuk menghasilkan nama-nama ini? Apakah itu hash dari nama file?

Sumber lain adalah algoritme pembuatan kode internal kompilator. Misalnya, jika kompilator memilih di antara dua pengoptimalan bergantung pada seberapa banyak RAM yang tersedia, atau seberapa kuat prosesornya, maka hal itu mencegah hasil agar tidak dapat direproduksi karena dua sistem dengan konfigurasi perangkat keras yang berbeda mungkin akan menghasilkan keluaran yang berbeda. Atau jika pengoptimal memiliki sakelar pengaman yang mengabaikan operasi jika algoritme masih berjalan setelah 500 md. Atau jika pengoptimal menggunakan strategi alokasi register non-deterministik . Atau jika kompilator menggunakan algoritme deterministik (“urutkan semua variabel lokal”) tetapi menggunakan kriteria non-deterministik (“… berdasarkan alamat heap dari struktur data yang kita gunakan untuk melacak setiap variabel.”).

Ada juga masukan ke sistem di luar kompiler yang menghambat reproduktifitas. Misalnya, jalur lengkap ke file yang sedang dikompilasi akan muncul di __ FILE __ arahan preprocessor, yang akan menyebabkan masalah saat dibuat dari mesin dengan nama berbeda untuk direktori root yang menyimpan kode sumber. (Atau bahkan dari mesin yang sama dengan dua salinan kode sumber.) Mungkin ada file yang dihasilkan secara otomatis oleh proses build yang masuk ke kompiler (misalnya, output dari compiler-compiler); itu juga perlu deterministik.

Stempel waktu adalah sumber non-determinisme lainnya. Meskipun semua inputnya identik, outputnya akan tetap berbeda karena stempel waktunya.

Oke, setidaknya kami bisa memperbaiki masalah dengan format file. Menyetel stempel waktu menjadi hash dari biner yang dihasilkan akan mempertahankan reproduktifitas.

“Oke, tapi mengapa tidak menyetel stempel waktu file ke stempel waktu dari kode sumber tempat biner itu dibuat? Dengan begitu, setidaknya ini masih stempel waktu. ” Itu masih merusak reproduktifitas, karena itu berarti bahwa menyentuh file tanpa membuat perubahan apa pun akan mengakibatkan perubahan dalam keluaran biner.

Ingatlah untuk apa stempel waktu digunakan: Ini digunakan oleh pemuat modul untuk menentukan apakah impor terikat harus dipercaya . Kami telah melihat kasus ketika stempel waktunya tidak akurat. Misalnya, jika Anda me-rebind DLL, DLL rebound memiliki stempel waktu yang sama dengan aslinya, bukan stempel waktu rebind, karena Anda tidak ingin merusak binding DLL lain yang terikat ke DLL Anda.

Jadi stempel waktunya sudah tidak bisa diandalkan.

Stempel waktu sebenarnya adalah ID unik yang memberi tahu pemuat, “Ekspor DLL ini tidak berubah sejak terakhir kali ada yang mengikatnya.” Dan hash adalah ID unik yang dapat direproduksi.

Read More

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments