La modification d'un fichier binaire avec Python

je suis en train de patcher un fichier hex.
j'ai deux fichiers de patch (hex) nommé "patch 1" et "patch 2"

le fichier à patcher est un 16 MO fichier nommé "fichier.bin".

j'ai essayé beaucoup de différentes façon pour le passé 6 ou 7 heures pour comprendre comment le faire. Je peux écrire une chaîne dans un fichier tout au long de la journée, mais je suis en train de faire ce qui suit:

ouvrir patch1.bin avec les octets lus
ouvrir patch2.bin avec les octets lus
ouvrir le fichier.bin à écrire des octets

je veux demander à des postes 0xc0010, et 0x7c0010, et d'appliquer patch1.bin
alors je veux chercher à 0x040000 et appliquer patch2.bin

donc dans l'ensemble je vais avoir 3 correctifs appliqués, puis fermez le fichier.bin"

si quelqu'un froid me donner un exemple que j'apprécie beaucoup 🙂

j'ai essayé d'abord ceci:

patch1 = open("patch1", "r");
patch2 = open("patch2", "r");
main = open("file.bin", "w");

main.seek(0xC0010);
main.write(patch1);
main.seek(0x7C0010);
main.write(patch1);
main.seek(0x40000);
main.write(patch2);
main.close();

mais a été informée, j'ai été a été d'essayer d'écrire une chaîne de caractères dans un fichier, en effet, pas ce que je voulais, lol
ensuite, j'ai essayé ceci:

infile1 = open("patch1.bin", "rb") 
new_pos1 = int("0x00", 16)
infile1.seek(new_pos1, 0)
infile2 = open('file.bin', 'wb')
new_pos2 = int('0xc0010', 16)
infile2.seek(new_pos2, 0xc0010)
chunk1 = int("6FFFE0", 16)         #this is how long patch1 file is
data1 = infile1.read(chunk1)
with open("file.bin", "a") as outfile:
    outfile.write(data1)

mais il n'a pas de travail, peu importe ce que j'ai essayé, je ne pourrais pas obtenir d'écrire les données à corriger le décalage.

J'ai réussi quelques fois à écrire le patch1 de fichier.bin, mais il n'a pas de patch à le droit de compenser, comme une question de fait, il a supprimé le fichier.bin et simplement copié patch1 à sa place. ce qui bien sûr est faux.

je dois vous rappeler que je suis de nouveau à python et à la programmation, mais je suis vraiment essayer de creuser mes pieds et apprendre, de sorte que tout de bons exemples seront examinés et, nous espérons, sera un bon apprentissage de la leçon pour moi 🙂

merci les gars et les filles de m'aider à comprendre ce que je faisais de mal 🙂

Qu'avez-vous essayer? Devis votre code.
Ce n'est pas un "hex file"; c'est un binaire fichier. Un hex fichier doit être un fichier texte contenant des nombres hexadécimaux. Ils sont souvent utilisés pour représenter données binaires, quand vous voulez travailler avec du texte.

OriginalL'auteur james28909 | 2013-02-01