Ecrire en binaire à un offset précis dans un .exe ou .dll [Résolu]

clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention - 5 juin 2007 à 12:55 - Dernière réponse : clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention
- 11 juin 2007 à 11:49
Bonjour à tous,

J'aimerais transfomer ce code vb.net en c# mais je ne trouve aucune alternative (désolé je suis débutant).
Merci d'avance pour vos réponses.

Voici le code en question :

Private
Sub btnModif_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnModif.Click

Dim f As Integer f = FreeFile()
 FileOpen(f, path, OpenMode.Binary)
FilePut(f, Chr(182), CInt("&H" & "1897EF") + 1)
FileClose(f)

End Sub
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 7 juin 2007 à 07:45
3
Merci
Alors, pour ta première question, la réponse est oui.
Tu peux même écrire directement plusieurs bytes contigus:

byte[] toWrite = new byte[]{0x33,0xC0};
bw.Write(toWrite);

Pour la 2ème question, ce n'est pas difficile d'essayer, comme le compilateur ne réclamme ni 0xC0, ni avec 0xc0, on peut en déduire que la case importe peu.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)

Merci SharpMao 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de SharpMao
cs_Willi 2381 Messages postés jeudi 12 juillet 2001Date d'inscription 13 février 2015 Dernière intervention - 5 juin 2007 à 19:07
0
Merci
Bonsoir,

FileOpen => System.IO.FileStream
FilePut => System.IO.StreamWriter

Avec les nombreux cas d'utilisations donnés dans les liens tu devrais t'en sortir.
Commenter la réponse de cs_Willi
clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention - 5 juin 2007 à 20:23
0
Merci
Bonsoir, merci pour cette réponse (qui j'en suis sur va m'apprendre beaucoup).

Cela reste vraiment très flou pour moi, est-ce que quelqu'un serait prêt à m'aider pour mettre ce code en c# avec des explications?
Merci
Commenter la réponse de clubberzZ
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 6 juin 2007 à 08:01
0
Merci
Hello,

J'avais fait il y a quelques temps un éditeur hexadécimal.

En gros pour écrire, tu as un FileStream et un BinaryWriter

FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);

fs.Seek(Position, SeekOrigin.Begin);
bw.Write(byteValue);

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention - 6 juin 2007 à 11:56
0
Merci
Bonjour et merci pour vos réponse!

J'ai essayé ceci mais une erreur apparait à la compilation :

using System.IO

private void btnModif_Click (sender object, EventArgs e)
{
string path = "C:\LeCheminDeMonApplication.exe";


FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);


fs.Seek(1897F0, SeekOrigin.Begin);
bw.Write(B6);


bw.close();
fs.close()
}
Commenter la réponse de clubberzZ
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 6 juin 2007 à 12:31
0
Merci
Salut,
Voici quelques corrections:

- Le path doit être précédé par un @ pour évité l'interprétation du caractère d'échappement.
- La fonction Seek prend un long comme premier argument.
- Il manque un ';' lors du close sur le FileStream
- Les méthodes close prennent des majuscules.
- ...

<hr />
-Blog-
Commenter la réponse de cs_Bidou
clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention - 6 juin 2007 à 13:12
0
Merci
using System.IO

private void btnModif_Click (sender object, EventArgs e)
{
string path = "C:\\LeCheminDeMonApplication.exe";
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);

fs.Seek(1897F0, SeekOrigin.Begin);
bw.Write(B6);

bw.Close();
fs.Close();
}

Merci j'avais effectivement corrigé tout cela sur mon projet, il me reste une erreur qui est celle de la fonction Seek (la fonction seek possèdes des arguments non valides), je pense que ma syntaxe pour la fonction Write n'est pas bonne non plus (byteValue), si quelqu'un connait la solution?
Commenter la réponse de clubberzZ
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 6 juin 2007 à 13:29
0
Merci
Essaie avec ça :

fs.Seek(0x1897F0, SeekOrigin.Begin);
bw.Write(0xB6);

Tu ne peux pas écrire directement des nombre hexadécimaux, tu dois les précéder de 0x pour qu'il comprenne.
Sinon, il n'aurait aucun moyen de différencier 0x10 et 10.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention - 6 juin 2007 à 16:38
0
Merci
Effectivement ca à l'air de fonctionner parfaitement, tous mes remerciements SharpMao!

J'aurais deux dernières petites questions :
 
1 - Est-il possible d'écrire plusieurs valeurs à la suite, je m'éxplique :

Avant mon code était :

FileOpen(f, path, OpenMode.Binary)
FilePut(f, Chr(51), CInt("&H" & "1897EF") + 1)
FilePut(f, Chr(192), CInt("&H" & "1897EF") + 2)
FileClose(f)

Maintenant cela est-il possible en ouvrant et fermant le fichier qu'à la fin?

// ...
fs.Seek(0x1897F0, SeekOrigin.Begin);
bw.Write(0x33);
fs.Seek(0x1897F0, SeekOrigin.Begin);
bw.Write(0xC0);

bw.Close();
fs.Close();

2 - Dans la fonction "bw.Write(0xC0);" la valeur Byte s'écrit-elle en majuscule ou minuscule? Le "C" ici en l'occurence.

Merci
Commenter la réponse de clubberzZ
clubberzZ 89 Messages postés vendredi 29 octobre 2004Date d'inscription 3 décembre 2007 Dernière intervention - 11 juin 2007 à 11:49
0
Merci
Bonjour à tous, je me permets de reposter dans ce sujet qui est totalement le même...

J'ai eu un problème concernant cette méthode avec le code sivant :

fs.Seek(0x1897F0, SeekOrigin.Begin);
byte[] toWrite = new byte[]{0x33,0xC0, 0xC0, 0xC0 };
bw.Write(toWrite);
fs.Seek(0x1897F9, SeekOrigin.Begin);
bw.Write(0xC0);

Quand je regarde avec un editeur héxadécimale à l'offset 1897F9 j'obtient bien le C0 à cet emplacement mais il m'affiche trois 00 00 00 après! Reprend il le nombre de byte dans la chaine toWrite? Je trouve cela très bizard. Merci d'avance!
Commenter la réponse de clubberzZ

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.