.exe Dateien in PB einbetten und ausführen

Anfängerfragen zum Programmieren mit PureBasic.
Axolotl
Beiträge: 146
Registriert: 31.12.2008 16:34

Re: .exe Dateien in PB einbetten und ausführen

Beitrag von Axolotl »

@GPI: ja, das würde ich auch so sehen. D.h.: Wenn es dann eine Datei sein soll, würde ich eine ZIP od. ähnlich favorisieren. Dann weiß der Anwender was er hat und auspacken kann man auch mit 'weniger' Rechten. Virus-Scanner mögen das sicherlich genau so wenig wie sich ändernde Executables. Ich habe da jedenfalls keine positiven Erfahrungen gemacht.
@juergenkulow ich weiß es nicht. Glaube aber, dass das schon mal an anderer Stelle thematisiert wurde.
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: .exe Dateien in PB einbetten und ausführen

Beitrag von Mijikai »

juergenkulow hat geschrieben: 02.08.2021 10:24 Ist die DataSection PAGE_EXECUTE_READWRITE ?
Nein - Lösung: Inline ASM
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: .exe Dateien in PB einbetten und ausführen

Beitrag von juergenkulow »

Code: Alles auswählen

; Beispiel für eine EXE in der DataSection und VirtualAlloc_ getestet mit Windows 64 bit
#EmbbedExecutable$ = "F:\rdtsc.exe" ; Beispielprogramm: ! nop  ! rdtsc ! shl rdx,32 ! or rax,rdx ! ret  
pagesize=((?EmbbedExecEnd - ?EmbbedExecStart)/4096+1)*4096 ; Berechne den Speicherbedarf auf 4k aufgerundet. 
pageadr=VirtualAlloc_(0,pagesize,#MEM_COMMIT,#PAGE_EXECUTE_READWRITE) ; Besorge ausführbaren Speicher vom Betriebssystem.
CopyMemory(?EmbbedExecStart,pageadr,?EmbbedExecEnd - ?EmbbedExecStart) ; Kopiere die Datasection in den ausführbaren Speicher.
*f=pageadr+$445 ; Berechne die Aufrufadresse. Der Offset $445 wurde x64dbg gefunden und ist selten der Gleiche.  
MessageRequester("rdtsc:",Str(CallFunctionFast(*f))) ; Rufe das Unterprogramm mit Adresse *f auf und gebe die akutelle CPU-TaktZeit aus. 

DataSection
  EmbbedExecStart: 
    IncludeBinary #EmbbedExecutable$ 
  EmbbedExecEnd:
EndDataSection
; Eine sehr gute Begründung ist für die praktische Nutzung dieser Konstruktion notwendig!
CompilerIf #PB_Compiler_OS<>#PB_OS_Windows Or #PB_Compiler_Processor<>#PB_Processor_x64
  CompilerError "Nur Windows 64 bit "
CompilerEndIf
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.

Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: .exe Dateien in PB einbetten und ausführen

Beitrag von Mijikai »

juergenkulow hat geschrieben: 06.08.2021 05:34 ...

Code: Alles auswählen

; Beispiel für eine EXE in der DataSection und VirtualAlloc_ getestet mit Windows 64 bit
#EmbbedExecutable$ = "F:\rdtsc.exe" ; Beispielprogramm: ! nop  ! rdtsc ! shl rdx,32 ! or rax,rdx ! ret 
...
Mit einer EXE (PE) geht das so nicht!
Mit PIC ist das hingegen kein Problem.
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: .exe Dateien in PB einbetten und ausführen

Beitrag von juergenkulow »

Bild
Wiki eng PE-Format
Microsoft PE-Format
Mijikai, Du hast ja recht.
Antworten