Assemblerprogramme zu groß

Gast #250056
Lesenswert?

Hallo Leute,

ich habe mir mal in den Kopf gesetzt, ein Windowsprogramm in Assembler
zu schreiben. Dazu benutze ich den MASM32, der ja mitlerweile frei ist.
Erste Fenster, Dialogboxen etc. kann ich schon erstellen und ich bin
echt begeistert, wie extrem einfach und kurz sich so ein
Assemblerprogramm gestaltet. Wenn man dann noch die high level syntax
von MASM beherrscht, kommt man schon recht nah an C ran und
programmiert aber trotzdem in reinem Assembler.

Nun zu meinem Problem: ich habe ein kleines Tool geschrieben, welches
mir in einer Messagebox die Anzahl der Millisekunden ausgibt, die seit
dem letzten Windowsstart vergangen sind. Funktioniert auch perfekt, im
Anhang Source und exe-File. Was mir aber nicht in den Kopf will ist,
warum das exe-File nicht größer wird, wenn ich weitere Befehle einfüge.
Z. B. ändert sich nichts an der Dateigröße, wenn ich 10 NOPs im
Quelltext einfüge und neu kompiliere. Oder wenn ich mir dreimal
hintereinander die Messagebox anzeigen lasse, ändert sich nichts. Hat
da jemand eine Erklärung? Das zweite wäre, wie kann man das exe-File
größenmäßig verkleinern? Ich habe mir es mal mit einem Hexeditor
angesehen und festgestellt, daß sehr viele Nullen enthalten sind. Wenn
man das File packt, gibts nur ein paar hundert byte. Vielleicht kann
man das aber bereits vom Assembler/Linker machen lassen. Leider habe
ich nichts gefunden. Wenn jemand eine Idee hat, wäre super. Ich vermute
ja, daß die erwähnten 10 NOPs an die Stelle kommen, wo die Nullen
stehen. Wäre dann aber nicht sehr effektiv vom Assembler.

Danke!

Gruß
Jens
Angehängte Dateien:
Gast #250057
Lesenswert?

Ich sehe zwar nichts in Deinem ZIP-File, aber eine Vermutung: Die
einzelnen Segmente werden vom Linker an 4 KB Grenzen ausgerichtet (<--
Linker, hat nichts mit dem Assembler zu tun!). Wenn Du weniger Code
produzierst, wird entsprechend aufgefüllt. Du kannst also noch 100 NOPs
tippen, und die Datei wird trotzdem nicht größer.

BTW: Wenn du mit dem Schalter /OPT:NOWIN98 linkst, wird an 512 Byte
Grenzen ausgerichtet.
Gast #250058
Lesenswert?

Danke für den Tip, dieser Schalter scheint aber per default aktiv zu
sein. Wenn ich ihn in /OPT:WIN98 ändere, wächst die Datei von 2560
Bytes auf 16384 Bytes an. Habe mit dem Hexeditor auch nochmal geschaut,
die 512 Byte Grenzen kommen hin. Es geht dann also nicht kleiner?
Gast #250062
Lesenswert?

im prinzip würde ich ja einfach hergehn und z.b upx uber die .exe
drüberjagen.. dann ist sie schön klein und alle sollten glücklich
sein... wobei damit da was kleiner wird müsstest du ein prog haben,
dass schon ein paar 100k groß ist....

dann wäre da noch die lustige idee selbst den header usw zu bastln ;)
damit wirds dann wirklich klein... G

und zum thema com files.... http://vx.netlux.org/lib/vlj02.html

ist aufwendig G wobei ich mir nicht sicher bin, obs nicht schon
hinhaut wenn du die lustigen libs reinholst.... wie gesagt bin mir
nicht sicher... ich bevorzuge nochimmer inline asm beim reversen*g* und
da auch nur die glue-logic um meine c/c++ dlls zu laden ...

wie gesagt... probieren geht über studieren... mache eine .com und
schau ob du das mit den win-libs compilieren kannst... wenn ja sollts
eigetnlich kein problem geben...

73
Gast #250063
Lesenswert?

> mache eine .com und schau ob du das mit den win-libs compilieren
> kannst

Jetzt überlegt Euch bitte mal, was ein COM File ausmacht. Dann sollte
auch klar sein, daß das so nicht gehen kann.

BTW: Aus rein nostalgischen Gründen suche ich gerade nach dem
Thunk-Compiler. Ist der bei den aktuellen SDKs gar nicht mehr dabei?
Gast #250064
Lesenswert?

Das mit UPX ist zwar gut, funktioniert jedoch bei den kleinen Dateien
nicht. Der Packer bringt eine Fehlermeldung aus der hervorgeht, daß das
File nicht packbar ist.

Das mit den COM-Dateien kenne ich auch noch aus DOS-Zeiten,
funktioniert aber unter Windows definitiv nicht, ich habs probiert.
Gast #250065
Lesenswert?

> Das mit UPX ist zwar gut,

Das ist nicht gut, IMO. Du verschwendest damit jede Menge RAM,
besonders wenn Du mehrere Instanzen Deines Programmes laufen lässt.
Dagegen kannst Du die paar Bytes mehr auf der Platte locker
verschmerzen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren