![]() |
Delphi Programme ~ 1kb
Ich wollte rausfinden, wie ich meine Apps. kleiner als 10kb kriege und deshalb habe ich im Internet recherchiert. Ich habe einige Beiträge in (Viren- & Trojaner) Foren gelesen und bin auf etwas aufmerksam geworden:
Code:
DAS PROBLEM = #3:
#1 -- Leere(alles raus, was nicht wirklich gebraucht wird) System & SysUnit erstellen (~20-30 Zeilen)
#2 -- Mit "dcc32.exe -Q system.pas sysinit.pas -M -Y -Z -$D- -0" kompilieren #3 -- Anstatt den Borland Linker einfach den von Microsoft verwenden -> Dazu muss das Borland OMF Format zu Intel OMF verwandelt werden -> und dazu gibts einen Konverter (omf2d.exe; Author EliCZ) #4 -- Konvertieren "omf2d Hello.obj /U-" #5 -- Und letztendlich linken "link.exe /ALIGN:32 /FORCE:UNRESOLVED /SUBSYSTEM:WINDOWS /ENTRY:Start$qqrv Hello.obj user32.lib /out:Hello.exe" Mein AntiVir bombardiert mich mit Warnungen, dass es sich bei omf2d um nen Trojaner handelt usw. Ich hab nen Upload bei Virustotal gemacht und der lieferte mir ~ 24/39 (61.54%) als Ergebnis :(. Den Link zum Programm gibts hier: ![]() Mich würds nun wirklich interessieren, ob es eine (evt. andere) Möglichkeit gibt, die Echsen wirklich so klein zu kriegen :) MfG |
Re: Delphi Programme ~ 1kb
NonVLC und ohne die großen Delphi-Units, wie SysUtils und Co., kommst du schon locker auf ~30 KB runter.
hab hier ein Programm,welches praktisch nur die Windows.pas und einige eigene WinAPIs enthält ... mit D7 kompiliert ist das nur 12 KB klein. |
Re: Delphi Programme ~ 1kb
Zitat:
das Problem liegt im wesentlichen am Linker - ich bin es von anderen (älteren) Sprachen gewohnt, besonders natürlich im Embedded-Bereich, dass nur gelinkt wird, was im Programm aufgerufen wird. Der Borland-Linker war dazu schon immer zu doof, wenn du uses math schreibst wird einfach alles gelinkt, was in math definiert ist, auch wenn du nur eine einzige Funktion brauchst. Die Lösung ist daher ein intelligenterer Linker, vermutlich könnte man auch Intel nehmen, aber das ändert nicht viel, also warum nicht MS. Im Programm selbst muss man natürlich auch möglichst wenige Funktionen benutzen, Beispiel: bei Umwandlung mm - inch definiert man für beide Richtungen einen Multiplikationsfaktor, denn wenn man auf Division ganz verzichten kann, braucht man schon einiges weniger an Rechenfunktionen. Die Entwicklung geht (leider) dahin, gleich die gesamte Library einzubinden (.NET), mit dem Argument dass ja auch Waschmaschinen heute MBytes an Speicher haben. Gruss Reinhard |
Re: Delphi Programme ~ 1kb
nee nee, der Linker ist schon intelligent genug ... Problem ist der Initialisations/Finalisations-Abschnitt ... alles was darin verwendet wird, wird auch gelinkt ... und das ist vorallem in SysUtils eine ganze Menge
|
Re: Delphi Programme ~ 1kb
Zitat:
Kann ich nun "EliCZ" trauen? Die haben ja das DDDK geschrieben und da sind einige Beispiele drinnen :? Ich bin auch für andere Vorschläge offen MfG |
Re: Delphi Programme ~ 1kb
Zitat:
|
Re: Delphi Programme ~ 1kb
Zitat:
Delphi-Quellcode:
ist nicht viel :S
SYSINIT:
unit SysInit; interface procedure _InitExe; procedure _halt0; procedure _InitLib(Context: PinitContext); var ModulelsLib: Boolean; TlsIndex: Integer = -1; TlsLast: Byte; const PtrToNil: Pointer = nil; implementation procedure _InitLib(Context: PinitContext); asm end; procedure _InitExe; asm end; procedure _halt0; asm end; end. SYSTEM: unit System; interface procedure _HandleFinally; type TGUID = record D1: LongWord; D2: Word; D3: Word; D4: array[0..7] of Byte; end; PInitContext = ^TInitContext; TInitCOntext = record OuterContext: PInitContext; ExcFrame: Pointer; InitTable: Pointer; InitCount: Integer; Module: Pointer; DLLSaveEBP: Pointer; DLLSaveEBX: Pointer; DLLSaveESI: Pointer; DLLSaveEDI: Pointer; ExitProcessTLS: procedure; DLLInitState: Byte; end; implementation procedure _HandleFinally; asm end; end. Wenn man diese Units verwendet, ändert sich nichts großartig ander Größe (~10kb) |
Re: Delphi Programme ~ 1kb
Zitat:
|
Re: Delphi Programme ~ 1kb
Ganz gute Anlaufstelle ist da wohl die Seite von
![]() Dort kann man zb. sowas finden: ![]() Diese Anwendung ist mit Delphi schon nur bei 16kb groß! Sollte das noch zu groß sein, dann hast du auf der Seite noch ein Bsp von Nico ![]() Dort ist die Anwendung nur noch 3kb groß! Allerdings musst du dafür schon die System.pas austauschen, welche auch auf den Seiten zufinden sind! Dabei gibt es verschiedene Versionen dort, einmal eine von Nico, und einmal eine von Assarbad (wenn ich mich recht entsinne)! Musst mal sehen wo sich diew befinden, weiß ich jetzt auch nicht mehr genau, müsste auch erst suchen!! Edit: Willst du es immer schön kleine haben, dann hilft dir nur das Umsteigen auf Maschienen-Sprache, also Assembler! |
Re: Delphi Programme ~ 1kb
Zitat:
ich bin halt entsetzlich altmodisch und denke, eine Waschmaschine soll Wäsche waschen und nicht eine Website mit Flash-Animationen, FTP-Server, DHCP und DNS zur Verfügung stellen - aber das ist natürlich Geschmackssache. Dafür muss ich in den Keller laufen und nachsehen, ob die Wäsche fertig ist, aber da mir das wg. beginnendem Alzheimer sowieso erst in 2-3 Stunden wieder einfällt, habe ich kaum Nachteile dadurch. Gruss Reinhard |
Re: Delphi Programme ~ 1kb
Zitat:
EDIT: Jawohl ... Wenn man es mit UPX packt, hat es ne Größe von 2,5 kb :) Ich bin zufrieden :) MfG |
Re: Delphi Programme ~ 1kb
Zitat:
|
Re: Delphi Programme ~ 1kb
Die Frage ist, vorallem in der heutigen Zeit, wofür man sowas überhaupt noch baucht.
OK, ich versuch auch oftmals alles so klein wie möglich zu halten, aber übertreiben muß ich das nun auch nicht. Selbst Nico und Assarbad schreiben nicht nur so kleine Programme (oftmals ist es ja einfach den Aufwand nicht wert) PS: da gibt es soeine 64kb-Fraktion, mit richtigen Wetbewerben, wo man versucht soviel wie möglich (ohne irgendwelche Komprimierungen, weibei sowas bei den Programmen kaum möglich ist, da dort nicht viel zum komprimieren drin ist) in eine 64 KB-Datei zu packen. die bekommen da z.B. sogar rießige 3D-Ego-Shooter mit Sound und allem drum und dran in solche Dateien rein. mir fiel jetzt nur ein Name eines Prorammes ein "Brüllwürfel" google fand dann dieses ![]() und wenn man da die Links unten verfolgt, findet man schonmal einen der "Irren" und seine Programme :angel: |
Re: Delphi Programme ~ 1kb
Zitat:
![]() Das ist so eine Wettbewerbsseite :) Dort sind über 100erte dieser Programme zu finden, einige sind schon wirklich beeindruckend^^ Die Programme auf der Seite sind nicht nur was für nonVcl Liebhaber, sondern auch was für Grafik-Fans, Sound-Fans und Hardware-Leistung-Test-Fans^^ Kann man sich auf jedenfall mal angeschaut haben... Edit: Link korrigiert |
Re: Delphi Programme ~ 1kb
Zitat:
Was das für einen Sinn hat, ist nochmal eine andere Frage, ich sehe keinen, aber vielleicht soll das Programm ja z.B. für ein Laptop mit SSDs oder so sein wo gerade so Windows drauf passt. |
Re: Delphi Programme ~ 1kb
[quote="lbccaleb"]
Zitat:
(bin ja selbst einer, der es zumindest versucht :P) MfG |
Re: Delphi Programme ~ 1kb
Zitat:
![]() Auch debris von denen ist sehr faszinierend. Aber IMHO sind die Demo-Zeiten vorbei, in denen man versucht hat, so viel multimedialen Schnick-Schnack wie möglich in eine Mini-Echse zu bekommen. Es ist eine feine Spielerei, aber Produktivität ist was anderes. In Zeiten von Gibabyte/Terabyte und DSL lohnt es sich einfach nicht mehr jedes Bit 2 Mal umzudrehen... |
Re: Delphi Programme ~ 1kb
joar, die Leute würden wohl Unreal Tournament auf 'ne Diskette draufbekommen X'D
Aber man sieht auch, wie schwer es ist etwas so klein hinzubekommen, abgesehn davon daß dann vieles Live berechnet und die Hardware dadurch ganz schön ausgelastet wird. (im Gegensatz zu den rießigen speilen, wo Vieles irgendwo vorberechnet abgespeichert ist) Drum sagte ich ja ... klein ist nicht schlecht, solange man es "aufwandsmäßig" nicht übertreibt. Und wenn man wirklich extrem klein arbeiten möchte, dann kommt man mit anderen Sprachen/Compilern auf Jedenfall besser, als mit Delphi. Dennoch: Selbst in Zeiten von viel Speicher muß ein Programm ja nicht unbedingt viele GB belegen -.-° Im Grunde sind es mehr Idealisten, die sowas noch machen ... also mehr aus Spaß und um zu zeigen was möglich wäre. |
Re: Delphi Programme ~ 1kb
Zitat:
das stimmt wohl, aber die Frage ist wieso eigentlich - wenn ich mich noch recht an die graue Vorzeit erinnere, wurde Turbo Pascal zu seligen Zeiten von DOS und Heimsoeth Software auf EINER Diskette geliefert. Daraus wurden dann 2 und das vorläufige Ende der Fahnenstange ist ja bekannt. War wohl eine andere Entwickler-Generation. Gruss Reinhard |
Re: Delphi Programme ~ 1kb
Den Sprachumfang und Leistungsumfang kannst du aber genauso wenig vergleichen wie die Größe. ;-)
Alleine schon die visuellen Formulare brauchen eben einiges. Deshalb ist nonVCL eben deutlich kleiner. Du kannst mit Delphi eben von Hause aus sehr viel mehr machen als mit Turbo Pascal, und auch mit jeder Version immer mehr. Irgendwoher muss diese Funktionalität schließlich kommen, das kostet Platz. |
Re: Delphi Programme ~ 1kb
Hallo zusammen,
was ist "nonVCL" eigentlich? wenn ich mich richtig erinnere haben "nonVCL"-Programme durchaus auch eine graphische Oberfläche, es muß also nicht Console sein. Zitat:
TP hat nur das mitgeschleppt was gebraucht wurde, MS-C war da wesentlich großzügiger, und der MS-Assembler hat auch genommen was er kriegen konnte. Gruß K-H |
Re: Delphi Programme ~ 1kb
Non-VCL ist eben die strikte Untersagung der Nutzung der Komponenten aus der Visual Component Library, sowie einiger Units, welche unnötige Sachen kapseln. Somit wird fast ausschließlich auf Windows API-Funktionen zurückgegriffen. Sicher kannst du damit auch graphische Benutzeroberflächen gestalten.
|
Re: Delphi Programme ~ 1kb
Zitat:
Die Programme werden deswegen kleiner, weil Du nur das aus der VCL 'nachprogrammierst', was Du auch wirklich konkret brauchst. Das Erkaufst Du Dir aber durch das Fehlen des 'Alles schon fertig' Baukastens. Also: Viel handarbeit -> kleine Echse. Wenig Handarbeit und die VCL nutzen die alles schon kann -> schneller fertig, aber große Echse :) Man muss halt immer abwägen. |
Re: Delphi Programme ~ 1kb
Zitat:
Und darunter zählen auch Dinge, welche im Initialisations-Abschnitt verwendet/geladen werden. Allerdings werden Ressourcen ohne Prüfung reingeladen ... z.B. schleppt jede Delphi-App standardmäßig immer ihren eigenen Courorsatz(Mauszeiger) mit sich rum, selbst wenn man nur den von Windows nutzt. Die VCL ist "nur" eine komfortablere, aber rießige Kapselung der WinAPI und einiger zusätzlicher Komponenten ... das kann man zu großen Teilen auch direkt mit der WinAPI erreichen. |
Re: Delphi Programme ~ 1kb
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Schau dir mal Anhang and an :) (Echse mit normalem Wnd (3kb)) EDIT: Ich habe mir die einzelnen Sektions angeschaut und habe folgendes bemerkt:
Code:
Wenn ich die Caves noch wegbekomme...
Codecaves
----------------------- CODE - 139 DATA - 1F6 BSS - 000 .idata - 0B6 .reloc - 200 ( vollständig leer ) .rsrc - 11B -------------- sum - 700 ( = 1792 bytes ) Ohne caves = 300 ( = 768 bytes ) MfG |
Re: Delphi Programme ~ 1kb
Auch noch ne möglichkeit seine Programme ein wenig kleiner zu bekommen, ist möglich durch die Benutzung des Programms "Strip-Reloc"
![]() |
Re: Delphi Programme ~ 1kb
Danke für die Nachhilfe, es ist gut aus berufenem Munde die eigenen Schlußfolgerungen bestätigt zu bekommen.
Zitat:
die restliche Zeit lebe ich weiterhin mit 400Kb-Monstern. Gruß K-H |
Re: Delphi Programme ~ 1kb
Zitat:
|
Re: Delphi Programme ~ 1kb
So, habe mal ein wenig etwas daran herum gebastelt und ein Statictext sowie einen Button eingebaut.
Netter weise kommt nun mein Virenscanner in fahrt. ;) Nu ist das Ding doch schon auf 5kb gewachsen... Was ich eigentlich fragen wollte, wo bekomme ich FillChar (bzw. (Rtl)FillMemory) her ? :gruebel: |
Re: Delphi Programme ~ 1kb
Zitat:
![]() |
Re: Delphi Programme ~ 1kb
Zitat:
Zitat:
![]() Um genau zu sein findest du den Code hier: ![]() |
Re: Delphi Programme ~ 1kb
Zitat:
|
Re: Delphi Programme ~ 1kb
Windows liefert doch schon eine Function mit, warum diese also nicht verwenden:
Code:
void FillMemory([out] PVOID Destination, [in] SIZE_T Length, [in] BYTE Fill);
Delphi-Quellcode:
Ich bin mir allerdings bei der Deklaration nicht 100% sicher.
procedure FillMemory(const x; Length: LongWord; Fill: Byte) stdcall;
external kernel32 name 'RtlFillMemory'; |
Re: Delphi Programme ~ 1kb
Zitat:
Ausnahmen sind SFX-Module, da habe ich fürs Entzippen auch schon eins mit 31 KiB mit Fortschrittsanzeige und allem geschrieben. Zitat:
|
Re: Delphi Programme ~ 1kb
Zitat:
Das stimmt nicht ganz -> kleine Echsen werden auch in der Demoszene ( siehe 4..512 kb Demos ) verwendet / geschrieben. Außerdem finde ich kleinere Dateien viel besser, da ich mir somit Platz spare -> ich weiß, dass es in der heutigen Zeit unnötig ist, "Platz" zu sparen aber weiß nicht .. ich mags eben so :P MfG |
Re: Delphi Programme ~ 1kb
Zitat:
|
Re: Delphi Programme ~ 1kb
Zitat:
Ordnet man die Liste nach der größe, dann sieh mal einer schau, was da nicht für kleine Anwendungen zum Vorschein kommen :) |
Re: Delphi Programme ~ 1kb
Zitat:
Und bei Viren spielt zusätzlich die Bandbreite eine Rolle. Ein solcher Virus muss ja x-fach verteilt werden, das geht schlecht, wenn man dafür sehr viel Uploadbandbreite braucht. |
Re: Delphi Programme ~ 1kb
Zitat:
|
Re: Delphi Programme ~ 1kb
Bei Viren kommt ja dann noch dazu, mit dieser sehr geringen Dateigröße zu vermeiden enttarnt zu werden!
Viele Viren infizieren ja, einfach alle Echsedateien auf der Platte, und kopieren sich in selbige! Jedesmal wenn diese Datei/Programm dann gestartet wird, wird sicher gestellt, dass der Virus auf dem System arbeiten kann! Ist der Virus nun aber 5mb groß, und infiziert ein Programm was gerade mal 230kb groß ist, so würde logischerweise selbst jeder Leihe sofort mitbekommen, das da was nicht stimmen kann! Das ist aber nun wirklich OT, und hat wie viele andere Post eigentlich nichts dmait zu tun, mit Delphi die Datei klein zu bekommen :) Und nur um das geht es ja hier in dem Fred... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz