Frage

Ich versuche, eine Bibliothek in Hex-Editor zum Bearbeiten, Einfügen-Modus. Der wichtigste Punkt ist, ein paar Einträge in es umbenennen. Wenn ich es in „Otherwrite“ -Modus mache, funktioniert alles einwandfrei, aber jedes Mal, wenn ich versuche, ein paar Symbole bis zum Ende der Zeichenfolge in „Einfügen“ Modus hinzufügen, schlägt die Bibliothek zu laden. Alles, was ich bin fehlt hier?

War es hilfreich?

Lösung

Ja, du verpasst viel. Eine Bibliothek folgt das PE / COFF -Format, das auf Zeiger in der gesamten Datei ziemlich schwer ist. (Eg, an dem Anfang der Datei ist eine Tabelle, die in der Datei, die die Positionen der einzelnen Abschnitte Punkte).

Im Fall, dass Sie Ressourcen bearbeiten, gibt es das Potential, es zu tun, ohne die Dinge zu brechen, wenn Sie sicherstellen, korrigieren Sie alle Hinweise und Größen für alles zeigt auf, nachdem Sie Ihre Änderungen, aber ich bezweifle es leicht sein werde. Im Fall, dass Sie die Bearbeitung des .text Abschnitts (dh der Code), dann bezweifle ich, werden Sie es, da die Operanden von Funktionsaufrufen und Sprüngen, um ihre Position sind relative Positionen in Code getan, erhalten - Sie Update benötigen würden der gesamte Code-Konto für Änderungen.

Eine Technik, dies zu überwinden, ist eine „Code Höhle“, wo man ein Stück des vorhandenen Code mit einem expliziten JMP-Befehl zu einem gewissen leeren Stelle ersetzen (Sie können diese zur Laufzeit tun, in dem Sie die Möglichkeit haben, neue Speicher zu erstellen ) -, wo Sie einige neue Codes definieren, die von beliebiger Länge sein kann -. dann explizit JMP zurück, wo Sie genannt (5 Bytes sagen für den JMP-Opcode + Operanden)

Andere Tipps

Sind die Namen sind Sie sie auf die gleiche Länge wie die alten Namen zu ändern? Wenn nicht, dann wird die Offsets der alles verschoben. Und tun das eine der Funktionen ein Anruf ein anderes? Das könnte ein anderes Problem Punkt sein. Es wäre einfacher, den Quellcode zu erhalten (von der Website des Projektes, wenn es nicht im Hause ist, oder vom Hersteller, wenn es geschlossen ist), und ändern Sie sie in dem, und es dann neu kompilieren. Ich bin neugierig, warum Sie die Namen sowieso ändern.

DLLs ist ein komplexer Binärformat (dh kompilierten Code). Die Zusammenstellung Prozess abwechselnd genannt Funktionsaufrufe in festverdrahtet Verweise auf bestimmte Positionen in der Datei ( „Offsets“). Deshalb, wenn Sie Insert Zeichen in die Mitte der Datei, die Offsets nach diesem Punkt nicht mehr entsprechen, was tatsächlich in der Lage ist, die sie sich beziehen, was bedeutet, dass die Funktionsaufrufe in Ihrer Bibliothek den falschen Code ausführen (wenn sie es schaffen, etwas zu laufen überhaupt).

Im Grunde genommen ist das Endergebnis, was Sie tun, ist immer Sachen gehen zu brechen. Wenn Sie Pech haben, könnte es sogar brechen es wirklich schlecht und verursachen schwere Schäden.

Klar - eine detaillierte Kenntnis des Formats, und was sich ändern muss. Wenn Sie sich fragen, warum einige Ihrer Änderungen Ursache Laden fehlschlagen, die Sie vermissen, dieses Wissen.

Bibliotheken sollen durch den Linker für die Verwendung des Linkers geschrieben werden. Sie folgen einem gut definierten Format, das einfach für den Linker sein soll, schreiben und zu lesen. Sie haben keine Toleranz benötigen für menschliches Zutun wie ein Compiler der Fall ist.

Sehr einfach, Bibliotheken sind nicht dazu gedacht, von Hex-Editoren geändert werden. Es kann möglich sein, Einträge zu ändern, indem sie mit den Namen der gleichen Länge zu überschreiben, oder das kann einen Index irgendwo vermasseln. Wenn Sie die Länge von etwas ändern, werden Sie wahrscheinlich Zeiger und Metadaten zu brechen.

Sie geben keinen Grund für den Wunsch, dies zu tun. Wenn es für Spaß, na ja, es ist schwieriger als erwartet. Wenn Sie einen anderen Grund haben, sind Sie besser dran, die Quelle bekommen, oder jemand bekommen, der die Quelle hat zu umbenennen und neu zu erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top