Les jeux sur console et sur PC ont parfois des correctifs pour corriger des bugs que les développeurs ont manqués / n'ont pas eu le temps de corriger.
Ma question est comment fonctionnent-ils?
Parfois, les fichiers de correctif ont une taille de quelques mégaoctets. Je ne comprends pas comment un petit fichier peut modifier un programme conforme.
Réponses:
Il y a plusieurs façons de le faire, le plus simple serait de XOR les deux fichiers et de les compresser (GZIP ou autres). La théorie derrière cela est que nous espérons pouvoir obtenir une grande séquence de zéros (les longues séquences des mêmes valeurs se compressent bien).
Vous pouvez approfondir ce concept et essayer de trouver les zones des deux fichiers où les données sont identiques et les omettre complètement.
Enfin, vous pouvez utiliser la structure de chaque type de fichier à votre avantage. Par exemple, dans un fichier EXE, vous pouvez conditionner chaque méthode individuellement (uniquement celles qui ont été modifiées) et reconstituer vous-même le fichier EXE lors de l'application du correctif; gardez à l’esprit, cependant, que c’est très probable dans le domaine de l’exploitation excessive et que cela ne vaut peut-être pas la peine de faire l’effort (le gain par rapport à un simple abonnement ne justifierait peut-être pas la complexité supplémentaire qui risquerait de se produire à l’état sauvage). Comme autre exemple, vous pouvez utiliser des fichiers diff pour les scripts.
Cependant, la plupart des systèmes de correctifs dans la nature empruntent la voie la plus simple: ils regroupent simplement les fichiers qui ont été modifiés - ils ne tentent pas uniquement de regrouper les modifications au sein de ces fichiers (probablement pour une bonne raison, le contenu du jeu est déjà compressé et la création de correctifs l'entropie ou les données compressées ne fonctionneront pas du tout ).
la source
Le code exécutable d'un jeu ne réside pas toujours dans l'exécutable, il est souvent divisé en plusieurs bibliothèques dynamiques (par exemple, le jeu, les graphismes et les moteurs de son), l'exécutable réel et éventuellement de nombreux scripts à des fins diverses.
Un correctif peut résoudre des problèmes dans l'une quelconque de ces parties sans garantir de modification dans chacune d'entre elles.
Une approche différente de celle consistant à remplacer tous les fichiers modifiés pourrait consister à simplement faire un diff binaire sur eux et à ne compacter que les différences réelles à redistribuer.
(Cela ne fonctionnera bien sûr que sur les fichiers dont vous pouvez être sûr qu'ils ne seront pas modifiés par l'utilisateur.)
la source
Normalement, ils utilisent un système de diff binaire tiers pour distribuer les correctifs aux données du jeu. Les exécutables sont généralement assez petits pour être distribués de manière triviale.
La plupart des jeux modernes ont des centaines de Mo de données de jeu (principalement des textures, des modèles, des niveaux de données, etc.). Ceux-ci nécessitent des correctifs assez souvent. Autant que je sache, les éditeurs disposent normalement d'une méthode standard pour y parvenir.
Inutile de dire qu'il existe des exemples open-source. Certaines distributions Linux (Fedora?) Utilisent des différences binaires pour leurs correctifs. Vous pouvez les étudier et lire leur code source ou leur documentation.
la source
Les
diff
algorithmes modernes peuvent efficacement trouver des séquences d’octets communes entre deux fichiers binaires. Sans surprise, si vous y réfléchissez. La compression de fichier repose également sur la recherche de séquences d'octets identiques.Une fois que vous avez la liste des séquences d'octets identiques, il ne vous reste plus qu'à envoyer les décalages anciens et nouveaux, leur longueur et bien sûr tout ce qui est complètement nouveau. Du côté de la réception, il s’agit alors d’un assemblage simple. Copiez les bits que vous devez conserver de l'ancien fichier, remplissez les nouveaux bits.
La création du patch devient encore plus facile si votre éditeur de liens peut créer un fichier MAP qui répertorie les décalages de chaque fonction du fichier.
la source