[Tutorial VB '08] Der Umgang mit einem BinaryReader

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [Tutorial VB '08] Der Umgang mit einem BinaryReader

      Vorwort
      Hallo erst mal,
      ich versuche dir jetzt zu erklären wie man mit VB 08 einen BinaryReader bedient und den Romnamen eines Spiels ausliest.

      Zutaten:
      [list]-VB 08
      -Ein GBA Rom zum testen
      -Wer will kann noch mein Template runterladen *klick* oder im Anhang nachgucken^^[/list]

      Index:
      [list]-Für was brauche ich den BinaryReader
      -Designen des Windows Forms
      -Schreiben des Quellcodes
      -Nachwort[/list]

      Für was brauche ich den BinaryReader
      [list]Ein BinraryReader wird benötigt wenn man z.B. Bilder aus Hex auslesen will oder wie in
      unserem Fall, einfach nur den Romnamen herausfinden will.[/list]

      Designen des Windows Forms
      [list]Als erstes fügst du folgendes in dein Windows Forms ein:
      [list]-1 Button
      -3 Labels[/list]

      Den Text von Button1 stellst du auf ROM Öffnen
      Den Text von Label1 stellst du auf RomName: -
      Den Text von Label2 stellst du auf SpielCode: -
      Den Text von Label3 stellst du auf LänderCode: -

      Am Ende könnte es so ausehen:

      [/list]


      Schreiben des Quellcodes
      So, jetzt kommt der Hauptteil, mach einen Doppelklick auf den Button. ich habe hoffentlich alles gut kommentiert:

      Quellcode

      1. Dim OFD As New OpenFileDialog ' erstellt einen neuen OpenFileDialog
      2. OFD.Filter = "GBA-ROMs(*.gba)|*.gba" ' stellt ein das man nur gba roms öffnen kann
      3. If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then 'Wenn im OFD ok geklickt wurde
      4. Try
      5. Dim Reader As New IO.BinaryReader(IO.File.OpenRead(OFD.FileName)) ' öffnet die ausgewählte datei
      6. Reader.BaseStream.Position = &HA0 'setzt den Reader an das Offset wo der Romname steht
      7. Label1.Text = "RomName: " + Reader.ReadChars(12) 'liest den Romnamen aus und schreibt ihn auf label1
      8. Reader.BaseStream.Position = &HAC 'setzt den Reader an das Offset wo der SpielCode steht
      9. Label2.Text = "SpielCode: " + Reader.ReadChars(3) 'liest den SpielCode aus und schreibt ihn auf label1
      10. Reader.BaseStream.Position = &HAF 'setzt den Reader an das Offset wo der Ländercode steht
      11. Label3.Text = "Ländercode: " + Reader.ReadChars(1) 'liest den Ländercode aus und schreibt ihn auf label1
      12. Reader.Close() 'Schliest den Datenstrom sodass die Datei wieder von anderen Programmen genutzt werden kann.
      13. Catch ex As Exception
      14. MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler") 'Zeigt die Fehlermeldung
      15. End Try
      16. End If
      Alles anzeigen



      Nachwort
      Ich hoffe ihr habt soweit alles kapiert. Bitte bewertet mein Tut.
      Dieses Tutorial ist Copyright©, 2008 by Freakstar und es darf frei weiter VERLINKT werden
      für Fragen stehe ich gerne zur verfügung oder stellt sie einfach in diesem Thread
      Im Anhang findest du noch die Projektdaten

      lg.
      Dateien
      Ich bin nicht vergesslich, in meinem Hirn werden nur Pointer zu den Leuten angelegt, auf die ich dann nur zurück greifen muss um die Information zu erlangen :)
    • Re: [Tutorial VB '08] Der Umgang mit einem BinaryReader

      Ich habe alles genauso gemacht und habe BinaryReader durch BinaryWriter ersetzt bloß jetzt fehlen mir noch diese & Offsets für 0xC38700 und 0x74E8F0. Wie lauten die?

      MfG
      raupy

      Chris sagt:
      du glaubst mir also nicht?

      raupy sagt:
      mal ehrlich
      warum ist es eigentlich den lebensziel
      mich 500x zu verarschen?

      Chris sagt:
      ich hab sone stempelkarte von edeka
      beim 500x mal
      krieg ich nen plüschteddy :)


      Krissel ftw.!
    • Re: [Tutorial VB '08] Der Umgang mit einem BinaryReader

      So nun gibt n Problem ich will die Bytes als Bytes in die Rom schreiben nicht als Text!
      Sprich da wo die FFs standen sollen nun die Bytes sthen und nun sethen sie da wo dieses y stehen...

      Chris sagt:
      du glaubst mir also nicht?

      raupy sagt:
      mal ehrlich
      warum ist es eigentlich den lebensziel
      mich 500x zu verarschen?

      Chris sagt:
      ich hab sone stempelkarte von edeka
      beim 500x mal
      krieg ich nen plüschteddy :)


      Krissel ftw.!
    • Re: [Tutorial VB '08] Der Umgang mit einem BinaryReader

      du meinst FF bytes? dann schreib doch einfach folgendes:

      Quellcode

      1. Try
      2. Dim OFD As New OpenFileDialog
      3. OFD.Filter = "Alle Dateien(*.*)|*.*"
      4. If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
      5. Dim Writer As New IO.BinaryWriter(IO.File.OpenWrite(OFD.FileName))
      6. For i = &H0 To 100 '&H0 durch die Startposition und 100 durch die Länge ersetzen
      7. Writer.BaseStream.Position = i
      8. Writer.BaseStream.WriteByte(&HFF)
      9. Next
      10. Writer.Close()
      11. End If
      12. Catch ex As Exception
      13. MsgBox(ex.Message)
      14. End Try
      Alles anzeigen


      lg.
      Ich bin nicht vergesslich, in meinem Hirn werden nur Pointer zu den Leuten angelegt, auf die ich dann nur zurück greifen muss um die Information zu erlangen :)
    • Re: [Tutorial VB '08] Der Umgang mit einem BinaryReader

      Ich will keine FF Bytes schreiben sondern eigene Bytes und wenn ich es wie im Tut mache schreibt er es als text in die Rom -.-

      Edit: Mein Code der nicht funzt:

      Quellcode

      1. Dim Lichtein As String
      2. Dim lichtaus As String
      3. Lichtein = "70B55646454660B4A149A24BA2481980A24E02331880A24D02331E80A14C02331D80A14A02331C8002331A809F4A02331A809F4A02331A8094469E4A02331A809D4A02331A809D4A02331A809C4B98469C4B42461A809C4A02331A809B4B9A469B4B52461A809B4A02331A809A4A02331A80023319800233188002331E8002331D80964A02331C8002331A800233944A198002331A80934A02331A80924A9D231B011380914A924B1A80924A02331A80914A02331A80624602331A808F4A02331A808F4A02331A80023319800233188002331E8002331D8002331C80424602331A80884A02331A80874A02331A80874A02331A80864A02331A80864B9C46864B62461A80854A02331A80854A02331A80844A02331A80844A02331A80834A02331A80023319800233188002331E8002331D807F4A02331C8002331A807D4A02331A807D4A02331A807C4A02331A807C4A02331A807B4A02331A807B4A02331A807A4A02331A807A4A02331A80794A02331A80794A02331A80023319800233188002331E8002331D8002331C80624602331A80724A02331A80714A02331A80714A02331A80704A02331A80704A02331A806F4A02331A806F4A02331A80653A02331A806D4A02331A806C4A02331A80023319800233188002331E8002331D80684A02331C8002331A80664A02331A80664A02331A80654A02331A80654A02331A80644A02331A80644A02331A80634A02331A80634A02331A80524602331A80002202331A805F4A42331A8002335E4A188002331A805D4A02331A805D4A02331A805C4A02331A805C4A02331A805B4A02331A805B4A02331A80A03202331A80594A02331A80584A02331A80584A02331A80574A02331A80574A02331A80564A02331A800CBC90469A4670BC01BC0047C0465A570000F87503024A350000EF3D0000D6520000FF7F0000552200001A370000BE4B00004A620000537F00009B7300000D3700000E760302F45B000059210000127603021F3A000052460000184B0000977F0000D16E00002A760302541A00002C760302D82600003B3700005B7300000B5A00005C3F00003F2F0000BF6300006B390000BC7B00004C760302337B00006C760000BE5300003C32000097250000DC260000DF430000884D0000EB5900006E6200005B43000094560000396B0000BD7B0000AD3A000033470000155B000078670000EB560000BE4F0000F9420000973E0000123600007A730000DD3A00007A6F0000D45E00001F7C0000D02500005A4B0000F8460000753A0000122E000018670000F1470000EE4100006C210000F1290000B82E00009C770000D9250000BD2A0000F01E0000742B000033560000B96E00003A730000FE7F0000"
      4. lichtaus = "70B55646454660B4AB4B00221A8090468023AA4ADB001380A94AAA4B1A80AA4A02331A80A94A02331A80C92202331A80A74A02331A80A74A02331A80A64A02331A80A64A02331A80A54AA64E02331A800233A54A1E8002331A800D2202331A80A24A02331A80A24AA24C02331A80C02102331C80090102339F4A198002331A809E4A9F4802331A8002339E4A188002331A809D4A02331A809C4A02331A809C4A02331A80442202331A80C82202331A80984A85235B001380974BE9221A80974A02331A80964A02331A80964A02331A800233954D1C8002331980944A02331D8002331A8002331880914A02331E8002331A80904A02331A808F4A02331A80424602331A808D4B9A468D4B52461A808D4A02331A808C4A02331A808C4A02331A808B4A02331A804D2202331A8002331C80884B9C46884B62461A800233874A1D80874E02331A8002331E80864AC9235B001380854A854B1A80854AB1239B011380844A854B1A80854A02331A80844A02331A80844A02331A80834A02331A80834A02331A80824A02331A80824A02331A8002331C806246804802331A807F4902331880023319807E4A02331E8002331A807C4A02331A807C4A02331A807B4A02331A807B4A02331A807A4A02331A807A4A02331A80794A02331A8002331D80524602331A80764A02331A800233754A1C8002331A8002331880734A0233198002331A80724A02331A80714A02331A80714A02331A80704A9923DB0013806F4A704B1A80823A02331A806E4A02331A806E4A02331A806D4A02331A80512202331A80424602331A806A4A42331A80624602331A80684A02331A80674A02331A80674A02331A80664AD9231B011380654A664B1A80D12202331A80644A02331A80A03202331A80624AF4235B001380614A624B1A80624A02331A80614A02331A80614A02331A80604A02331A800CBC90469A4670BC01BC0047C046F8750302FA750302630C0000FC7503024A210000534E00008E0D000032220000A030000087510000EF41000081050000682A000073080000A61400005A570000451A00008C290000B5560000CE250000102E00004D560000454500002E76030230760302AE090000CE3D0000C1300000A5140000AE41000011160000F5050000753A0000725200004C760302E9510000224D0000742A0000F1080000421400005A7603026B2D0000F75E000062760302951A00006476030266760302E33800006876030266410000532500008C350000314A0000B55A0000A51900002B260000E71C0000AD310000B45A00000D3A000070460000E3350000B62E0000F12100008F1D00000A150000D519000042100000F65E0000724A0000CC3D00001F7C0000A876030252260000AA7603026D1900000A0D000010460000714F0000E620000064040000E9080000027703029456000004770302B50900000C7703026C0A00000E7703020A350000B149000031520000D65A0000"
      5. Dim OFD As New OpenFileDialog ' erstellt einen neuen OpenFileDialog
      6. OFD.Filter = "GBA-ROMs(*.gba)|*.gba" ' stellt ein das man nur gba roms öffnen kann
      7. If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then 'Wenn im OFD ok geklickt wurde
      8. Dim Writer As New IO.BinaryWriter(IO.File.OpenWrite(OFD.FileName)) ' öffnet die ausgewählte datei
      9. Writer.BaseStream.Position = &HC38700
      10. Writer.BaseStream.WriteByte(lichtaus)
      11. Writer.BaseStream.Position = &H74E8F0
      12. Writer.BaseStream.WriteByte(Lichtein)
      13. End If
      Alles anzeigen

      Chris sagt:
      du glaubst mir also nicht?

      raupy sagt:
      mal ehrlich
      warum ist es eigentlich den lebensziel
      mich 500x zu verarschen?

      Chris sagt:
      ich hab sone stempelkarte von edeka
      beim 500x mal
      krieg ich nen plüschteddy :)


      Krissel ftw.!
    • Schuldigung falls ich das Thema "hochpushe" aber ich hab ein paar Fehler im Quellcode gefunden

      Quellcode

      1. Dim OFD As New OpenFileDialog ' erstellt einen neuen OpenFileDialog
      2. OFD.Filter = "GBA-ROMs(*.gba)|*.gba" ' stellt ein das man nur gba roms öffnen kann
      3. If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then 'Wenn im OFD ok geklickt wurde
      4. Try
      5. Dim Reader As New IO.BinaryReader(IO.File.OpenRead(OFD.FileName)) ' öffnet die ausgewählte datei
      6. Reader.BaseStream.Position = &HA0 'setzt den Reader an das Offset wo der Romname steht
      7. Label1.Text = "RomName: " + Reader.ReadChars(12) 'liest den Romnamen aus und schreibt ihn auf label1
      8. Reader.BaseStream.Position = &HAC 'setzt den Reader an das Offset wo der SpielCode steht
      9. Label2.Text = "SpielCode: " + Reader.ReadChars(3)soweit ich weiß ist der Code 4 zeichen lang 'liest den SpielCode aus und schreibt ihn auf label1 2 ist richtig
      10. Reader.BaseStream.Position = &HAF 'setzt den Reader an das Offset wo der Ländercode steht
      11. Label3.Text = "Ländercode: " + Reader.ReadChars(1) 'liest den Ländercode aus und schreibt ihn auf label1 3 ist richtig
      12. Reader.Close() 'Schliest den Datenstrom sodass die Datei wieder von anderen Programmen genutzt werden kann.
      13. Catch ex As Exception
      14. MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler") 'Zeigt die Fehlermeldung
      15. End Try
      16. End If
      Alles anzeigen
      Die Signatur dieses Benutzerprofils sind nur für Freunde von »Keks3000« zugänglich. Falls du mein Freund bist ignoriere diese Nachricht.
    • Keks3000 schrieb:

      Schuldigung falls ich das Thema "hochpushe" aber ich hab ein paar Fehler im Quellcode gefunden

      Quellcode

      1. Dim OFD As New OpenFileDialog ' erstellt einen neuen OpenFileDialog
      2. OFD.Filter = "GBA-ROMs(*.gba)|*.gba" ' stellt ein das man nur gba roms öffnen kann
      3. If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then 'Wenn im OFD ok geklickt wurde
      4. Try
      5. Dim Reader As New IO.BinaryReader(IO.File.OpenRead(OFD.FileName)) ' öffnet die ausgewählte datei
      6. Reader.BaseStream.Position = &HA0 'setzt den Reader an das Offset wo der Romname steht
      7. Label1.Text = "RomName: " + Reader.ReadChars(12) 'liest den Romnamen aus und schreibt ihn auf label1
      8. Reader.BaseStream.Position = &HAC 'setzt den Reader an das Offset wo der SpielCode steht
      9. Label2.Text = "SpielCode: " + Reader.ReadChars(3)soweit ich weiß ist der Code 4 zeichen lang 'liest den SpielCode aus und schreibt ihn auf label1 2 ist richtig
      10. Reader.BaseStream.Position = &HAF 'setzt den Reader an das Offset wo der Ländercode steht
      11. Label3.Text = "Ländercode: " + Reader.ReadChars(1) 'liest den Ländercode aus und schreibt ihn auf label1 3 ist richtig
      12. Reader.Close() 'Schliest den Datenstrom sodass die Datei wieder von anderen Programmen genutzt werden kann.
      13. Catch ex As Exception
      14. MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler") 'Zeigt die Fehlermeldung
      15. End Try
      16. End If
      Alles anzeigen


      Meine Kaffeemaschine funktioniert nicht, kannst du mir sagen warum? :] Solange du die Fehlermeldung nicht postest, kann dir so schnell niemand weiterhelfen. Ich tippe mal darauf, dass entweder eine Referenz oder ein Verweis fehlt.

      MfG

    • ein das ist es nicht ich meine, in der Erklärung hätte statt Label1 auch Label 2 und 3 stehen können weil es um Label 1, 2 und 3 ging, aber überall nur Label1 stand. Und der Spielcode besteht aus 4 Stellen also, 3 normalen und dem Ländercode der aber auch dazu gehört.
      Die Signatur dieses Benutzerprofils sind nur für Freunde von »Keks3000« zugänglich. Falls du mein Freund bist ignoriere diese Nachricht.
    • Das ist doch überhaupt kein Fehler o.o

      Spoiler anzeigen
      Reader.BaseStream.Position = &HAC
      Label2.Text = "SpielCode: " + Reader.ReadChars(3) 'hier liest er 3 Bytes vom Spielcode aus

      Reader.BaseStream.Position = &HAF
      Label3.Text = "Ländercode: " + Reader.ReadChars(1) 'hier liest er 1 Byte, nämlich den Ländercode



      Er liest alles aus und speichert alles getrennt zur Unterscheidung in verschiedenen Labels. Dass du denkst, dass es zusammengehört, liegt wohl daran, weil es so immer bei Hacks geschrieben wird und auch bei AM.

      Ein Fehler ist es trotzdem nicht.
      Und man könnte es dir mit einer Zeile recht machen:
      dim allTogheter as string = label1.text & label2.text