www.mikrocontroller.net

Forum: PC-Programmierung Assemblerprogramme zu groß


Autor: Jens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: René König (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe rumprobiert: mit den Schaltern /DRIVER und /ALIGN:4 lässt sich die
Dateigröße auf 984 Byte reduzieren **FREU**

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unter DOS ging's noch kleiner. Da gab's nämlich .com-Files, die keinen
Header hatten und dadurch WIMRE 256 bytes einsparen konnten.

Autor: Thomas Stütz (tstuetz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.COM Dateien sind auch unter Windows XP/2000/98 noch ausführbar
ob daraus aber Windows-Funktionen aufrufbar sind weiß ich nicht.

Gruss

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: René König (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: René König (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.