Hex Editor automatisieren


  • Mod

    Was soll denn dieser komische Umweg mit dem filename? Mach doch einfach

    fopen(argv[1], "rb+");
    

    Dann kann man dein Programm auch nicht mehr kapern, indem man mehr als 50 Zeichen eingibt.

    Und ein Array mit 0 Elementen? 😮 Das ist falsch. Du hast bloß Pech, dass das Programm zufällig trotzdem funktioniert, aber das wird dir noch bei nächster Gelegenheit um die Ohren fliegen. Dabei nutzt du sogar an keiner Stelle die Array-Eigenschaft. Lass mich raten: Du hast zuerst korrekterweise einen int gehabt, aber dann wollte

    fwrite(n,sizeof(int),1,fp);
    

    nicht compilieren. Dann hast du so lange wild zufällige Zeichen in dein Programm geschrieben, bis es doch zufällig compilierte, ohne zu verstehen, was vorher falsch war oder was die Neuerung überhaupt genau bedeutet. Geht diese Vermutung in die richtige Richtung?

    Aus unserem Thread für Neulinge:

    c.rackwitz schrieb:

    Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.



  • Ich hätte ein Array mit 1 Element logisch gefunden (genau ein int als Übergabe wollte fwrite nich) aber das ergab einen seltsamen Fehler. Das Programm erhöhte zwar mein byte um 1 aber ab diesem offset war die datei völlig verändert. Meine Idee: fwrite schreibt noch irgendeine undeklarierte zweite Variable ins File also hab ich den Index um 1 verringert und jez läufts 😃
    Bitte regen Sie sich nich auf ich bin froh dass es funktioniert hat. Und zumindest das hat es, ich habe das Mass update ausgiebig analysiert und getestet, am Ende diente es als ISO Edit auf FFVII und das ist geglückt also feier ich das jez 😃


  • Mod

    Klassischer Fall von so vielen Fehlern, das einige sich wieder gegenseitig aufheben. Es ist ein kleines Wunder, dass das tatsächlich funktioniert haben soll. Sicher, dass es funktioniert hat?

    Die von dir vermutete Erklärung ist jedenfalls Unsinn.



  • Ich sehe ehrlich gesagt keine Fehler im netz steht das "0 length arrays" unter gnu erlaubt sind. Warum es mit Index 1 nich funktionierte...was weiss ich ^^

    Ja es hat geklappt, ich habe die Files mit nem Hex Editor mit den Originalen verglichen und der einzige Unterschied ist jeweils das eine Byte welches ich um 1 erhöht habe. Auch beim Testen des ISOs erzielte ich keine Fehler und die gewünschte Veränderung.



  • Du siehst keinen Fehler darin, das erste Element eines Arrays der Länge Null zu benutzen? Selbst wenn es legal wäre, Arrays der Länge Null (außerhalb der letzten Datenmember von Structs) zu deklarieren, müsste ziemlich offensichtlich sein, dass das Unfug ist.


  • Mod

    Karabellum schrieb:

    Ich sehe ehrlich gesagt keine Fehler im netz steht das "0 length arrays" unter gnu erlaubt sind.

    Erlaubt: Mag sein. Aber was ist das erste Element eines Arrays ohne Elemente, welches du fröhlich benutzt? Das ist irgendetwas hinter dem eigentlichen Array. Das heißt, du schreibst und liest hier fröhlich in andere lokale Variablen hinein. Je nach dem, wie die Variablen genau auf dem Stack angeordnet sind, könntest du dir damit zum Beispiel dein Offset zerschießen. Deshalb wundere ich mich auch gerade sehr, dass es funktioniert, denn ich hatte in Erinnerung, dass der GCC ohne Optimierung die Variablen einfach in der Reihenfolge anordnet, wie sie im Programm auftauchen, so dass du hier tatsächlich unabsichtlich im Offset rumpfuschen würdest. Vielleicht irre ich mich auch mit der Reihenfolge. Oder du hast Optimierungen aktiviert und hast Glück, dass "nur" im unbenutzten Dateinamen rumgeschrieben wird. Oder du merkst gar nicht, dass das Programm falsch gelaufen ist. Jedenfalls eine ganze Menge Glück, wenn das wirklich funktioniert haben sollte. Oder Pech, weil du nun nicht einmal einsiehst, dass das falsch ist und dir das falsch einprägst. Beim nächsten Mal geht's dann schief.

    Warum es mit Index 1 nich funktionierte...was weiss ich ^^

    Da sind garantiert noch mehr Fehler drin, denn allein die Verwendung eines Arrays ist schon falsch. Wozu soll man bitte ein Array mit einem Element brauchen? Da nimmt man einfach eine einzelne Variable. Ich habe vorhin nur oberflächlich über den Code geschaut und dies waren die Fehler, die mir sofort ins Auge sprangen. Wenn du noch einmal den fehlerhaften Code mit genauer Fehlerbeschreibung zeigst, kann man sich das mal genauer ansehen.



  • Ein unentdecktes Fehlverhalten des Programms ist ausgeschlossen. Es hat die Aufgabe genau 1 Byte zu verändern, wenn am File irgendwas sonst anders wäre, hätte der Hex Editor das beim Vergleich gefunden.

    Dass Array[0] komisch is weiss ich auch aber er sagte ja "so viele Fehler" der Rest sollte aber ok sein.

    Und ich merke mir das auch nich so, int und array[1] funktionierten nich deswegen hab ich was anderes probiert und warum das funzt - nix für Ungut Jungs - is mir in diesem Einzelfall dann ehrlich gesagt egal.

    Das Programm hab ich doch auf der letzten Seite gepostet, wenn du es dir genauer ansehen willst nur zu. Fehlermeldungen gab es keine.



  • Ich hoffe, dass du in einem halben Jahr, wenn du dir ein bisschen Ahnung erarbeitet hast, auf diesen Thread zurückblickst und er dir richtig peinlich ist. Mehr kann ich dazu wirklich nicht mehr sagen.



  • Das hoffst du ? Finde ich aber nicht sehr nett 😃
    Deine Missgunst verstehe ich in keinem Fall.



  • Karabellum, SeppJ und seldon wollen dir nur helfen.
    Mag sein, dass dein Programm - so wie es jetzt kompiliert wurde mit diesen Einstellungen und Compiler - funktioniert. Wie SeppJ schon sagte, Glück gehabt.
    Aber wenn du in der Zukunft so weiter programmierst, wirst du vielleicht kein Glück mehr haben. Dann wird die von uns allen so geliebte Windowsfehlermeldung (sofern du Windows benutzt), die aussagt, dass dein Programm nicht mehr funktioniert. Und dann wirst du die nächsten Stunden/Tage/Wochen* damit verbringen, herauszufinden, wo du Speicher bearbeitest, der dir nicht gehört.
    Und davor wollen wir dich schützen. Wir haben diese Fehler schon alle gemacht.
    Wir wollen nicht, dass du sie auch machst.
    Aber wenn du nicht willst, ok!
    Sag später nur nicht, wir hätten dich nicht gewarnt...

    *Ernsthaft; ich übertreibe nicht. Mit etwas Glück gehts schneller, aber das Umschreiben wird lange dauern.



  • Is mir schon klar aber warum muss man sich da aufregen? Ich habe ja bereits gesagt dass ich das nicht so weiterverwenden werde oder mir merke dass das richtig ist oder so. Ich brauchte dieses Programm jetzt für eine bestimmte Sache und es ging mir nur darum die zuende zu bringen, danach brauche ich das nie wieder.

    Ich bin mit der Sache jetzt fertig geworden und da gibt es dann eigentlich nichts mehr zu zusagen. Wär ich selbst Moderator TOPIC CLOSED 😃



  • Auch wenn du es vermutlich eh nicht mehr liest:

    Karabellum schrieb:

    Is mir schon klar aber warum muss man sich da aufregen?

    Sie regen sich nicht auf, sie sind ganz sachlich geblieben.

    Ich habe ja bereits gesagt dass ich das nicht so weiterverwenden werde oder mir merke dass das richtig ist oder so. Ich brauchte dieses Programm jetzt für eine bestimmte Sache und es ging mir nur darum die zuende zu bringen, danach brauche ich das nie wieder.

    Trotzdem wäre es besser, sich falsche Dinge nicht anzugewöhnen.
    Das denkst du später dann vielleicht auch und dann gehts nicht mehr.
    Sieh es einfach als Übung.



  • Klar les ich das. Und du hast Recht genau wie deine Vorredner. Und sie haben mir ja auch geholfen sehr sogar. Is doch alles gut ^^


Anmelden zum Antworten