Game konsol dan PC terkadang memiliki tambalan untuk memperbaiki bug yang tidak sempat / tidak sempat diperbaiki oleh pengembang.
Pertanyaan saya adalah bagaimana cara kerjanya?
Terkadang file tambalan berukuran beberapa megabyte. Saya tidak mengerti bagaimana file kecil dapat mengubah program yang dipatuhi.
Jawaban:
Ada beberapa cara untuk melakukan ini, yang paling sederhana adalah dengan XOR dua file dan kompres mereka (GZIP atau sebagainya). Teori di balik ini adalah semoga Anda bisa mendapatkan urutan besar nol (urutan panjang dengan nilai yang sama kompres dengan baik).
Anda dapat mengambil konsep itu lebih jauh dan mencoba dan menemukan area dari dua file yang datanya identik dan menghilangkannya sama sekali.
Akhirnya, Anda bisa menggunakan struktur masing-masing jenis file untuk keuntungan Anda. Misalnya, dalam EXE Anda dapat mengemas setiap metode secara individual (hanya yang telah berubah) dan menyusun kembali EXE sendiri selama aplikasi patch; perlu diingat, bahwa hal ini sangat mungkin terjadi di ranah kerja keras yang berlebihan dan mungkin tidak sepadan dengan usaha tersebut (keuntungan dari seorang bdiff sederhana mungkin tidak membenarkan kerumitan ekstra yang bisa pecah di alam liar). Sebagai contoh lain Anda bisa menggunakan file diff untuk skrip.
Namun, sebagian besar sistem penambalan di alam liar mengambil rute paling sederhana: mereka hanya mengemas file yang telah berubah - mereka tidak mencoba untuk hanya mengemas perubahan dalam file-file itu (mungkin karena alasan yang baik, sebagian besar konten game sudah dikompres dan membuat tambalan terhadap tinggi entropi atau data terkompresi tidak akan berfungsi sama sekali ).
sumber
Kode yang dapat dieksekusi dari sebuah game tidak selalu berada hanya di dalam executable, seringkali itu dibagi menjadi beberapa perpustakaan dinamis (misalnya game, grafik dan mesin suara), executable yang sebenarnya, dan mungkin banyak skrip untuk berbagai keperluan.
Sebuah tambalan bisa memperbaiki masalah di salah satu bagian ini tanpa menjamin perubahan di semua bagian itu.
Pendekatan yang berbeda dari mengganti semua file yang diubah bisa dengan hanya melakukan diff biner pada mereka, dan hanya packackge perbedaan aktual yang akan didistribusikan.
(Tentu saja itu hanya akan berfungsi pada file yang Anda jamin tidak akan diubah oleh pengguna.)
sumber
Biasanya mereka menggunakan sistem biner pihak ketiga untuk mendistribusikan tambalan ke data game. Executable biasanya cukup kecil untuk dibagikan sepele sepenuhnya.
Sebagian besar game modern memiliki ratusan MB data game (kebanyakan tekstur, model, level data dll). Ini membutuhkan penambalan yang cukup sering. Sejauh yang saya tahu, penerbit biasanya memiliki cara standar kepemilikan untuk melakukan ini.
Tidak perlu dikatakan, ada contoh open-source. Beberapa distribusi Linux (Fedora?) Menggunakan perbedaan biner untuk tambalannya. Anda dapat menyelidikinya dan membaca kode sumber atau dokumentasinya.
sumber
Modern
diff
Algoritma dapat secara efisien menemukan urutan byte yang umum di antara dua binari. Tidak mengherankan jika Anda memikirkannya. Kompresi file bergantung pada menemukan urutan byte yang identik juga.Setelah Anda memiliki daftar urutan byte yang identik, Anda hanya perlu mengirim offset lama dan baru, panjangnya, dan tentu saja apa pun yang benar-benar baru. Di sisi penerima, itu kemudian perakitan langsung. Salin bit yang perlu Anda simpan dari file lama, isi bit baru.
Membuat tambalan menjadi lebih mudah jika tautan Anda dapat memuntahkan file MAP yang mencantumkan offset setiap fungsi dalam file.
sumber