2048 byte long ASCII block an eine EXE Datei hängen

Anfängerfragen zum Programmieren mit PureBasic.
funk.munich
Beiträge: 123
Registriert: 27.03.2006 09:45

2048 byte long ASCII block an eine EXE Datei hängen

Beitrag von funk.munich »

Hallo zusammen,

ist es möglich eine 2048 byte long ASCII block an eine exe Datei anzuhängen und diese später beim Aufruf der exe Datei einzulesen?

Danke im vorraus,
Daniel
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: 2048 byte long ASCII block an eine EXE Datei hängen

Beitrag von Kiffi »

> ist es möglich eine 2048 byte long ASCII block an eine exe Datei
> anzuhängen

ja, das geht mit IncludeBinary()

Code: Alles auswählen

DataSection
  ASCIIBlock:
    IncludeBinary "DeinAsciiBlock"
    Data.b 0
EndDataSection
> und diese später beim Aufruf der exe Datei einzulesen?

... mit PeekS(?ASCIIBlock)

Grüße ... Kiffi
Zuletzt geändert von Kiffi am 01.12.2006 13:58, insgesamt 1-mal geändert.
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Da gibt es doch auch noch Read und Data. Wäre das nicht auch was?

@ Kiffi: darf man denn Bindestriche in Labelnamen verwenden? Nee, oder? Das wäre mir neu... :?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> @ Kiffi: darf man denn Bindestriche in Labelnamen verwenden? Nee, oder?

danke für den Hinweis. Wenn man den Code aus dem Gedächtnis hier
reintippert, kann das schon mal vorkommen. Hab's oben korrigiert.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Kein Problem. Nur noch mal zur Erinnerung (für alle, auch mich :D ):

Variablennamen dürfen nur A-Z, a-z, 0-9 und _ enthalten.

Für Proceduren-, Macro, Label-, Konstanten-, Parameter-, LinkedList-, Array-, Structure- und Pointernamen und Interfaces (was immer das auch ist) gilt dasselbe wie für Variablennamen. Habe ich noch einen Typ vergessen? Ich glaube nicht ;-)

@ Kiffi: Verwende doch lieber einen _Unterstrich_, das sieht dann wieder übersichtlicher aus!! :D
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
funk.munich
Beiträge: 123
Registriert: 27.03.2006 09:45

Beitrag von funk.munich »

Hi Ihr beiden,

danke für die schnellen Antworten :D

Also folgender Ablauf:

- PB Datei mit DataSection erstellen/kompilieren
"Data.b 0" hier müsste ich dann z.B. "Data.b 2048" schreiben?
- über ein separates programm einen ASCII block an die kompilierte
Datei hängen/schreiben
- Aufruf der kompilierten Datei und mit PeekS den Block einlesen

Sind die Schritte korrekt? Oder ist da noch etwas falsch?

Danke + Gruß,
Daniel
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

das 0-byte wird als string-ende interpretiert und für PeekS(..) benötigt [siehe hilfe zu PeekS()]

Code: Alles auswählen

hWin=OpenWindow(0, 50,50,400,200, "")
CreateGadgetList(hWin)

  EditorGadget(0, 0,0,  400,200)
    SetGadgetText(0, PeekS(?ASCIIBlock) )
  
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow


DataSection
  ASCIIBlock:
    IncludeBinary "C:\test\test.txt"
    Data.b 0
EndDataSection
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> 2048 byte long ASCII block an eine EXE Datei hängen

Code: Alles auswählen

#ExeFile = "test.exe"; hier solls angehängt werden
#DataFile = "data.dat"; hier befinden sich die 2048 byte

If OpenFile(0, #ExeFile)
  FileSeek(Lof(0))
  If ReadFile(1, #DataFile)
    Mem = AllocateMemory(2048)
    If Mem
      ReadData(1, Mem)
      WriteData(0, Mem, 2048)
      FreeMemory(Mem)
    EndIf
    CloseFile(1)
  EndIf
  CloseFile(0)
EndIf
Zum auslesen die eigene Exe lesend öffnen, fileseek ans ende minus 2048
und lesen :wink:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
funk.munich
Beiträge: 123
Registriert: 27.03.2006 09:45

Beitrag von funk.munich »

Hi Thomas,

das funxt irgendwie nicht :(
Bekomme nur kryptische Dinge angezeigt.

Code: Alles auswählen

file$ = "seek01.exe"
  
If ReadFile(0,file$) 
  length = Lof()
  FileSeek(length - 2048)
  *MemoryID = AllocateMemory(2048)
  If *MemoryID
    bytes = ReadData(*MemoryID, 2048)
    MessageRequester("", PeekS(*MemoryID))
  EndIf
  CloseFile(0)
EndIf
BTW, nicht wundern, dass es PB3.9x ist. Will ich nutzen, da ich dann den
Code auch unter Linux sowie Mac nutzen kann. 3.9 existiert ja für alle 3 platformen.

Danke + Gruß,
Daniel
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Beim erstellen am besten ans Ende der Datei noch die genause länge als Long schreiben.
Beim Lesen, ans Ende -4, dort die länge als long einlesen und dann mit fileseek lof - 4 - laenge.
Sollte klappen, ging bisher immer :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten