Frage

Ich versuche, ein Programm in der Montage zu schreiben und die resultierende ausführbare Datei als klein wie möglich machen . Manches, was ich tue, benötigt Windows-API-Aufrufe zu Funktionen wie Write. Ich habe einige Erfolge mit Aufruf dieser Funktionen hatte, aber nach dem Kompilieren und Linken, mein Programm kommt im Bereich von 14-15 KB aus. (Aus einer Quelle von weniger als 1 KB) Ich habe gehofft, für viel, viel weniger als das.

Ich bin sehr neu auf niedriges Niveau Dinge zu tun, wie diese, damit ich weiß nicht wirklich, was das Programm kleiner machen getan werden müßte. Ich verstehe, dass die exe-Format selbst ziemlich viel Platz in Anspruch nimmt. Kann etwas das?

zu minimieren getan werden

Ich sollte erwähnen, dass ich NASM und GCC bin mit aber ich kann einfach, wenn sich das ändern würde helfen.

War es hilfreich?

Lösung

Siehe Tiny PE für eine Reihe von Tipps und Tricks, die Sie verwenden können die endgültige Größe der ausführbaren Datei reduzieren. Seien Sie gewarnt, dass einige der späteren Techniken in diesem Artikel sind äußerst fragil.

Andere Tipps

Der Standard Abschnitt Ausrichtung für die meisten PE-Dateien ist 4K mit dem natürlichen System Speicher-Layout auszurichten. Wenn Sie einen .data, .text und .resource Abschnitt haben - das ist schon 12K. Das meiste davon wird 0'en sein und eine Verschwendung von Speicherplatz.

Es gibt ein paar Dinge, die Sie tun können, diese Verschwendung zu minimieren. Zuerst den Abschnitt Ausrichtung auf 512 Bytes reduzieren (nicht wissen, die für nasm / gcc benötigten Optionen). Zweitens fusioniert die Abschnitte, so dass Sie nur einen einzigen .text Schnitt aufweisen. Dies kann ein Problem sein, obwohl für moderne Maschinen mit dem NX-Bit eingeschaltet. Diese Sicherheitsfunktion verhindert Modifikation von ausführbaren Code-Abschnitten von Dingen wie Viren.

Darüber hinaus gibt es eine ganze Reihe von PE Kompressionswerkzeuge gibt, die Ihre PE kompakt wird und es dekomprimieren, wenn sie ausgeführt.

Ich schlage vor, mit der dumpbin Dienstprogramm (oder GNU objdump), um zu bestimmen, was den meisten Platz nimmt. Es kann Ressource-Dateien, große globale Variablen oder so ähnlich sein.

FWIW, die kleinsten Programme kann ich mit ML oder ML64 montieren sind in der Größenordnung von 3 kb. (Das ist nur zu sagen hallo Welt und verlassen.)

Geben Sie mir ein kleines C-Programm (nicht C ++), und ich werde Ihnen zeigen, wie ein 1 ko .exe mit ihm zu machen. Die kleinste Größe der ausführbaren ich empfehlen, ist 1K, weil es auf einigen Windows ausgeführt wird scheitern, wenn es nicht mindestens diese Größe ist.

Sie müssen lediglich mit Linker Schalter spielen, um sie geschehen! Ein guter Linker, dies zu tun ist Polink.

Und wenn Sie alles in Versammlung zu tun, ist es noch einfacher. Gehen Sie einfach auf das MASM32 Forum und Sie werden viele Programme wie dieses sehen.

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