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 🙂
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
Vous devez vous connecter pour publier un commentaire.
Vous avez seulement besoin d'utiliser
seek
etwrite
. Utilisationseek
pour passer à la position etwrite
à overrwite les données existantes.ok j'ai compris ce que c'était, avec le fichier ("fichier.bin', 'w') devait être " r+".... après j'ai changé le code fonctionne impeccable. merci beaucoup 🙂
Lors de l'ouverture les fichiers de correctif, vous devez l'ouvrir en mode binaire -
open("<fn>", "rb")
, alors que le fichier à patcher devrait être ouvert en "r+b" mode.w
mode tronque le fichier. Utilisationr+b
pour patcher le fichier existant.🙂 tous en même temps
OriginalL'auteur bikeshedder
1.txt:
un.py:
1.txt:
Cela devrait vous donner un indice.
OriginalL'auteur Antony Hatchkins
Vous devez utiliser le
r+b
mode pour éditer le fichier cible.wb
est le mode d'écriture sans la mise à jour et va tronquer un fichier existant. Découvrez http://docs.python.org/2/library/functions.html#open ou votre système d'exploitation page de man pour fopen pour obtenir plus de détails sur les différents modes.w+b
tronque le fichier. Utilisationr+b
dans ce cas.Oups, j'ai même écrit il y! Corrigé, merci.
OriginalL'auteur m.brindley