begin process at 2008 09 06 04:45:32
1 237 644 membres
42 nouveaux aujourd'hui
14 313 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Ecrire en binaire à un offset précis dans un .exe ou .dll [ Windows / Autre ] (clubberzZ)

Ecrire en binaire à un offset précis dans un .exe ou .dll le 05/06/2007 12:55:12

clubberzZ
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 :

PrivateSub 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

Re : Ecrire en binaire à un offset précis dans un .exe ou .dll le 05/06/2007 19:07:04

Willi
Membre Club
(Admin CS)
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.

Re : Ecrire en binaire à un offset précis dans un .exe ou .dll le 05/06/2007 20:23:13

clubberzZ

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


Re : Ecrire en binaire à un offset précis dans un .exe ou .dll le 06/06/2007 08:01:18

SharpMao
Membre Club
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)

Re : Ecrire en binaire à un offset précis dans un .exe ou .dll le 06/06/2007 11:56:07

clubberzZ

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()
}


Re : Ecrire en binaire à un offset précis dans un .exe ou .dll le 06/06/2007 12:31:51

Bidou
(Admin CS)
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.
- ...



-Blog-

Re : Ecrire en binaire à un offset précis dans un .exe ou .dll le 06/06/2007 13:12:26

clubberzZ
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?


Re : Ecrire en binaire à un offset précis dans un .exe ou .dll le 06/06/2007 13:29:40

SharpMao
Membre Club
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)

Re : Ecrire en binaire à un offset précis dans un .exe ou .dll le 06/06/2007 16:38:29

clubberzZ
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






Re : Ecrire en binaire à un offset précis dans un .exe ou .dll le 07/06/2007 07:45:52

SharpMao
Membre Club
Réponse acceptée !
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)


[Page 1 Page 2]
Classé sous : exe, binaire, ecrire, précis, offset

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS