![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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 by Thomas Breitkreuz