Dateimodifikation



  • Hi, ich bin bin dunkelgrün hinter den Ohren, nur so als Nebeninformation 😉

    Mein Programm soll wenn es fertig ist eine *.exe Anwendungsdatei öffnen, zu bestimmten offsetten springen und diese mit nem Vorgabewert (vorzugsweise hex) vergleichen und gegebenenfalls dieses überschreiben.

    FILE* fp = fopen("Tribes.exe", "rb+");
    char read;

    fseek(fp, 1538715, SEEK_SET);
    read = fgetc(fp);
    pos = ftell(fp);
    sprintf(hex, "%x", read);

    Soweit Super. Jetzt tauchen ein paar Fragen auf.

    1. Is dafür diese Art des auslesens überhaupt geeignet oder kann ich vielleicht direkt in Hex oder so auslesen? Wenn ja wie?
    2. Wie vergleiche ich hex werte? Habe mit t in 54 umwandeln lassen aber if(hex==54) spricht nicht an.
    2. Wie genau nehme ich jetzt meine änderungen vor? Sodass die Datei im Nachhinein immer noch Funktioniert. (Insofern es nicht wegen der Art der Änderungen abstürzt ;D)

    Kann mir jemand weiterhelfen? Ich sitze schon Stundenlang hier und mehr als das oben habe ich nicht zusammengebracht.
    Ich wäre sehr erfreut wenn ihr mir z.B. die Umwandlung direkt als Anschluß an meinen Code schreiben würdet. Habe sscanf mit %x probiert aber immer linkerfehler bekommen.

    Herzlichen Dank!!! 🕶



  • GreyHound schrieb:

    1. Is dafür diese Art des auslesens überhaupt geeignet oder kann ich vielleicht direkt in Hex oder so auslesen? Wenn ja wie?

    Denk mal nach!

    Ich weiss, wie man eine Keks macht. Aber wie zum Teufel macht man nur einen Cookie?

    Bye, TGGC (Der Held lebt!)



  • TGGC schrieb:

    GreyHound schrieb:

    1. Is dafür diese Art des auslesens überhaupt geeignet oder kann ich vielleicht direkt in Hex oder so auslesen? Wenn ja wie?

    Denk mal nach!

    Ich weiss, wie man eine Keks macht. Aber wie zum Teufel macht man nur einen Cookie?

    Bye, TGGC (Der Held lebt!)

    Mann, was ist los TGGC, das war ne nette und hilfreiche Antwort.... 😞

    Wo ist der alte geblieben 😕 😮 😞



  • GreyHound schrieb:

    Hi, ich bin bin dunkelgrün hinter den Ohren, nur so als Nebeninformation 😉

    Dann solltest du dich vielleicht mal wieder waschen. 😃

    Aber mal Spass beiseite. Hexadezimal ist ja nur ein Datenformat, hat also keinen direkten Bezug auf den Wert der Daten.

    a = 20;
    a = 0x14;
    a = 024;
    

    Welchen Wert hat hier a jeweils? Richtig, immer denselben. Du liest also dein char ein und vergleichst es einfach. Fertig.
    Was anderes ist es, wenn du lexikalische Umwandlungen durchführen möchtest, zB String <-> int. Das kann ich deiner Problemstellung aber bisher nicht entnehmen.



  • Ah Danke,

    also mittlerweile weiss ich das ich sofort

    if(read == 0xFF) {

    machen kann, is schonma sehr fein ;F



  • Hallo GreyHound,

    ob ein Zeichen druckbar ist oder nicht, interessiert dein C erstmal nicht die Bohne!!! Es ist halt die kleinste Einheit (abgesehen von bitfields), auf die Dein C zugreifen kann, schlichtwegs ein Byte - in anderen Sprachen heißt der Typ auch so 🙄 !
    Du kannst damit rechnen, vergleichen, Schleifenzähler anlegen und was weiß ich noch ... und Dein Compiler schunkelt sich schon selbst raus, ob er es intern als int, long oder sonstwie behandelt (Optimierung).

    Erst beim char- Array (mehr oder minder Strings und stdio betreffend) kommen ein paar Eigenheiten hinzu, die Obacht erfordern, wie der Typ char INTERPRETIERT werden soll ⚠

    Aber prinzipiell liest Du byteweise und das ist schon korrekt so 😃



  • oki top 😉 thx
    wollte nur nicht glauben das ich nen char wie ich ihn auslese auf die art if(h=0x12) vergleichen kann aber das is wohl kein thema....



  • Es geht nicht um Glauben.

    Bye, TGGC (Dem beste BdT)


Anmelden zum Antworten