exe dateien ins project einbinden und starten.

Anfängerfragen zum Programmieren mit PureBasic.
whitelion
Beiträge: 46
Registriert: 05.05.2008 18:16
Wohnort: Celle
Kontaktdaten:

exe dateien ins project einbinden und starten.

Beitrag von whitelion »

ich frage mich, wie ich z.B. eine (oder mehrere) exe dateien in mein projekt integrieren kann: sagen wir mal ich möchte upx.exe includieren und mache flogendes:

Code: Alles auswählen

  DataSection
    upx:
    IncludeBinary "upx.exe"
  EndDataSection
mal abgesehen von der frage ob das überhaupt richtig ist.

- wie jumpe ich an die stelle meiner inkludierten datei um diese zu starten (mit parametern)?

- verstehe ich das richtig, dass die dann NICHT auf der festplatte ausgelagert wird?

- jetzt mal rein theoretisch: könnte man auch folgendes konstrukt basteln: ich nehme eine meine projecdatei, in selbiger ist upx (wie oben gewünscht) und spiel.exe includiert. jetzt nehme ich upx.exe und packe damit die inkludierte spiel.exe. erst dann schreibe ich sie auf einen datenträger! .... geht sowas?
...das leben ist wie ein schlechtes adventure-game, aber die grafik ist verdammt geil!
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag von Rokur »

Mit IncludeBinary kannst du eine Binärdatei in dein Programm einbinden, diese ist dann nach dem Compilieren direkt in deiner Exe-Datei enthalten.

Zum Ermitteln der Adresse und Größe der eingebundenen Datei gibt es in der Hilfe auch ein gutes Beispiel.

Du kannst natürlich wie in deinem Beispiel auch eine Exe-Datei einbinden, nur direkt starten geht dann nicht, dazu musst du sie erst auf die Festplatte schreiben.

Muss die Datei denn unbedingt in deiner Exe enthalten sein? Und wenn ja, warum darf die dann nicht temporär ausgelagert werden? Normalerweise werden von einem Programm benötigte Daten, Bibliotheken und andere Programme im selben Verzeichnis mit installiert, als separate Dateien, sofern es nicht sowieso zentrale Daten/Programme/Bibliotheken sind.

Zu deiner letzten Frage:
Du kannst mit PB einen Speicherbereich packen/entpacken und diesen erst dann auf einen Datenträger schreiben, schau dir dazu mal die Bibliothek "Packer" an (PackMemory()/UnpackMemory()).
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Die Länge zu ermitteln ist recht simpel:

Code: Alles auswählen

DataSection
	ExeStart:
	IncludeBinary "upx.exe"
	ExeEnd:
EndDataSection 

Debug ExeEnd-ExeStart
Was das Ausführen der Datei angeht ...

Also es möglich per Prozess-Injektion die Anwendung auszuführen ohne sie auf Pladde zwischenspeichern zu müssen. Das ist aber alles andere als eine Anfängersache und außerdem höchst fraglich ob das für deine Zwecke überhaupt nötig ist.

Wenn es einfach darum geht deine Anwendung oder dein Spiel mittels UPX zu verkleinern dann tu dies wenn du eine finale Version kompiliert hast. Alles andere wäre sinnfrei.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Fluid Byte hat geschrieben:

Code: Alles auswählen

Debug ExeEnd-ExeStart
+2?
a²+b²=mc²
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ist das jetzt tatsächlich eine Frage oder 'ne Aussage?
Windows 10 Pro, 64-Bit / Outtakes | Derek
whitelion
Beiträge: 46
Registriert: 05.05.2008 18:16
Wohnort: Celle
Kontaktdaten:

Beitrag von whitelion »

gut danke so weit erstmal.

könnte ich also eine datei als binary integrieren und anschließend direkt in den speicher schreiben und dann per jump auf den entrypoint selbiger starten?

ich finde auslagerungen von dateien grundsätzlich mal richtig daneben. zumindest wenn ich eine relativ kleine exe-datei habe ist es doch blödsinn mit festplattenauslagerungen zu arbeiten. - ist zumindes meine meinung.
...das leben ist wie ein schlechtes adventure-game, aber die grafik ist verdammt geil!
Benutzeravatar
coder
Beiträge: 204
Registriert: 25.09.2005 17:53
Computerausstattung: Intel Core2Quad Q8200 @ 2.33GHz
ASUS P5Q3, 2GB DDR3-1066 RAM, ATi Raedeon HD 4850
Wohnort: Deutschland
Kontaktdaten:

Beitrag von coder »

Exe direct aus dem Ram ausführen (naja nicht ganz direct!):
(Hinweis der code ist nicht von mir, den habe ich mal hier im Forum gefunden.)

mfg coder

//Edit hab den Linke gefunden! hier klicken
Hab den Code hier entfernt!
Windows 7 x64 | PureBasic 4.60 4.50 4.02
Ja verdammt, meine Eltern wohnen immer noch bei mir!
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

LOL?

Bild
Windows 10 Pro, 64-Bit / Outtakes | Derek
whitelion
Beiträge: 46
Registriert: 05.05.2008 18:16
Wohnort: Celle
Kontaktdaten:

Beitrag von whitelion »

lol, ist ja wahnsinn ... ich hab die codeinjection mal getestet.... auch wenn ich glaube, dass ich sie nicht wirklich brauche da ich ja keinen virus schreiben möchte, war ich neugierig. oh wunder oh wunder ! - ich bekomme zum ersten mal seit XP nutzung einen warnhinweis, dass windows dateischutzsystem eine injection erkannt hat! :-) entweder ist der code schon sehr alt oder dient mit unbekannten anderen zwecken... starten lässt sich damit jedoch nichts. aber evtl gibt es ja noch eine möglichkeit in anderer richtung z.B. so:

1. binary integrieren
2. binary in einen reservierten speicherbereich laden.
3. binary per jump auf entrypoint ausführen.

ok, stellt sich an dieser stelle die frage wie ichs nutzen kann, wenns keine exe ist, sonder z.B. eine gif für eine grafische GUI.... aber eins nach dem anderen...

wenn mir jetzt ein kenner sagt "ja das geht" dann versuche ich mich mal :-)
...das leben ist wie ein schlechtes adventure-game, aber die grafik ist verdammt geil!
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

ok, stellt sich an dieser stelle die frage wie ichs nutzen kann, wenns keine exe ist, sonder z.B. eine gif für eine grafische GUI.... aber eins nach dem anderen...
Na das ist einfach mit CatchSprite(). Allerdings ist .GIF 'nen bissi doof weil PB das nicht laden kann. :mrgreen:

Es hat aber jemand im Englischen Forum dafür was geschrieben.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten