Comment faire pour modifier un fichier binaire de la valeur hexadécimale à l'aide de C#
Alors, voici ma question. J'ai un fichier binaire que je veux modifier. Je peux utiliser un éditeur hexadécimal pour le modifier, bien sûr, mais j'ai besoin de faire un programme pour éditer ce fichier en particulier. Dire que je connais un certain hex je veux éditer, je sais que c'est l'adresse etc. Disons que c'est un 16 bits en binaire, et l'adresse 00000000, c'est sur la ligne le 04, et il a une valeur de 02. Comment pourrais-je créer un programme qui puisse changer la valeur de cet hex, et uniquement à cet hex avec le clic d'un bouton?
J'ai trouvé les ressources qui parlent de la même chose, mais je ne peux pas pour la vie de me trouver de l'aide avec la cause exacte.
Toute aide serait appréciée, et s'il vous plaît, de ne pas juste me dire la réponse si il y en a un, mais essayer de l'expliquer un peu.
OriginalL'auteur JC Leyba | 2010-07-10
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est mieux expliqué par un exemple précis. Voici les 32 premiers octets d'un fichier exécutable comme indiqué dans Visual Studio éditeur hexadécimal:
Maintenant un fichier est une séquence linéaire d'octets. Les lignes que vous voyez dans un éditeur hexadécimal sont juste là pour rendre les choses plus facile à lire. Lorsque vous souhaitez manipuler des octets dans un fichier à l'aide de code, vous devez identifier les octets par leurs basée sur 0 positions. Dans l'exemple ci-dessus, les positions de la non-zéro octets sont comme suit:
Dans l'éditeur hexadécimal représentation indiqué ci-dessus, les numéros sur la gauche représenter la position du premier octet de la ligne correspondante. L'éditeur montre 16 octets par ligne, de sorte qu'ils incrément par 16 (0x10) au niveau de chaque ligne.
Si vous voulez simplement prendre l'une des octets dans le fichier et changer sa valeur, l'approche la plus efficace que je vois serait d'ouvrir le fichier à l'aide d'un FileStream, chercher à la position appropriée, et d'écraser l'octet. Par exemple, la suite va changer la 0x40 à la position 24 à 0x04:
OriginalL'auteur Nick Guerrera
Eh bien la première chose serait probablement de comprendre les conversions. Hex décimal n'est probablement pas aussi important (sauf si bien sûr vous avez besoin de changer la valeur d'un nombre décimal en premier, mais c'est une simple formule de conversion), mais hex binaire sera important de voir que chaque hex de caractères (0-9,A-F) correspond à une sortie binaire.
Après la compréhension de ce genre de choses, la prochaine étape est de comprendre exactement ce que vous recherchez, faites la conversion correcte, et remplacez la chaîne exacte. Je recommande (si la mémoire tampon ne soit pas trop large) afin de prendre l'ensemble de vidage hexadécimal et remplacer tout ce que vous êtes à la recherche d'en éviter le remplacement d'un double séquence binaire.
Espère que ça aide!
Ce qui concerne,
Dennis M.
OriginalL'auteur RageD