Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Programme ~ 1kb (https://www.delphipraxis.net/132115-delphi-programme-%7E-1kb.html)

mr_emre_d 6. Apr 2009 14:53


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:
#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"
DAS PROBLEM = #3:
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:
http://w-shadow.com/blog/2006/10/12/...ers-in-delphi/

Mich würds nun wirklich interessieren, ob es eine (evt. andere) Möglichkeit gibt, die Echsen wirklich so klein zu kriegen :)

MfG

himitsu 6. Apr 2009 15:08

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.

Reinhard Kern 6. Apr 2009 15:11

Re: Delphi Programme ~ 1kb
 
Zitat:

Zitat von mr_emre_d
Mich würds nun wirklich interessieren, ob es eine (evt. andere) Möglichkeit gibt, die Echsen wirklich so klein zu kriegen :)

MfG

Hallo,

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

himitsu 6. Apr 2009 15:16

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

mr_emre_d 6. Apr 2009 15:20

Re: Delphi Programme ~ 1kb
 
Zitat:

Zitat von himitsu
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.

:D Dat ist mir schon klar. Ich entwickle eh fast nur NonVCL - das kann man sogar aus meinem ersten Satz entnehmen :P

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

Bernhard Geyer 6. Apr 2009 15:22

Re: Delphi Programme ~ 1kb
 
Zitat:

Zitat von Reinhard Kern
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.

Nein, so doof ist der Borland-Linker nicht. Das "Problem" liegt daran in den von Math.pas geuseden Units viele initialization-Abschitte vorhanden sind (Siehe SysUtils.pas) die dafür sorgen das die Exe von 10 auf 40 kByte anschwillt. Was nicht verwendet wird, landet auch nicht in der Exe! Bei Objekten geht er nicht soweit. Alles was Private/Protected (?) als Methoden definiert ist wird AFAIK gebunden auch wenn es nicht verwendet wird.

mr_emre_d 6. Apr 2009 15:22

Re: Delphi Programme ~ 1kb
 
Zitat:

Zitat von himitsu
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

Naja:
Delphi-Quellcode:
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.
ist nicht viel :S

Wenn man diese Units verwendet, ändert sich nichts großartig ander Größe (~10kb)

Dax 6. Apr 2009 16:01

Re: Delphi Programme ~ 1kb
 
Zitat:

Zitat von Reinhard Kern
Die Entwicklung geht (leider) dahin, gleich die gesamte Library einzubinden (.NET), mit dem Argument dass ja auch Waschmaschinen heute MBytes an Speicher haben.

Hast du was gegen in Delphi-Programme eingebundene Fremd-DLLs? :)

lbccaleb 6. Apr 2009 16:54

Re: Delphi Programme ~ 1kb
 
Ganz gute Anlaufstelle ist da wohl die Seite von Assarbad!
Dort kann man zb. sowas finden:

nonVcl-App
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
MiniDExe
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!

Reinhard Kern 6. Apr 2009 17:10

Re: Delphi Programme ~ 1kb
 
Zitat:

Zitat von Dax
Zitat:

Zitat von Reinhard Kern
Die Entwicklung geht (leider) dahin, gleich die gesamte Library einzubinden (.NET), mit dem Argument dass ja auch Waschmaschinen heute MBytes an Speicher haben.

Hast du was gegen in Delphi-Programme eingebundene Fremd-DLLs? :)

Hallo,

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 13:37 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz