Möglichkeit, DATA im Code zu schreiben ?
Möglichkeit, DATA im Code zu schreiben ?
Hallo,
ich habe folgendes Problem: ich würde gerne Strings, die ich in DATA ablegen will, verschlüsseln.
Gibt es eine Möglichkeit, nachdem ich einen String mit einer Prozedur verschlüsselt habe, daraus ein DATA zur erzeugen ?
Oder generell z.B. etwas einzulesen, z.B.aus einem File, und daraus DATA-Statements zu erzeugen ?
Und noch eine andere Frage: viele Dinge, die mit DATA gemacht werden, könnt ich auch mit Strukturen machen.
Hat die Nutzung von DATA Geschwindigkeitsvorteile ?
Vielen Dank vorab !
ich habe folgendes Problem: ich würde gerne Strings, die ich in DATA ablegen will, verschlüsseln.
Gibt es eine Möglichkeit, nachdem ich einen String mit einer Prozedur verschlüsselt habe, daraus ein DATA zur erzeugen ?
Oder generell z.B. etwas einzulesen, z.B.aus einem File, und daraus DATA-Statements zu erzeugen ?
Und noch eine andere Frage: viele Dinge, die mit DATA gemacht werden, könnt ich auch mit Strukturen machen.
Hat die Nutzung von DATA Geschwindigkeitsvorteile ?
Vielen Dank vorab !
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Möglichkeit, DATA im Code zu schreiben ?
Die DataSection und Strukturen sind zwei grundlegend verschiedene Dinge. Wie meinst du das, dass du vieles auch mit Strukturen machen könntest?
Ansonsten gibt es Tools, die dir aus einer Datei oder sonstigen beliebigen Daten eine DataSection erstellen. Zum Beispiel das hier aus dem englischen Forum: Data_Tool_BF - Data Generator - 50% smaller output + AES - Modules
Ansonsten gibt es Tools, die dir aus einer Datei oder sonstigen beliebigen Daten eine DataSection erstellen. Zum Beispiel das hier aus dem englischen Forum: Data_Tool_BF - Data Generator - 50% smaller output + AES - Modules
Re: Möglichkeit, DATA im Code zu schreiben ?
Mit Inline-ASM einfach.
Beispiel:
Um auch Daten in die Code Sektion zur Laufzeit schreiben zu können
muss die Code Sektion den Write-Flag gesetzt haben!
Beispiel:
Code: Alles auswählen
EnableExplicit
Procedure.i Main()
Debug PeekS(?blob)
ProcedureReturn #Null
blob:
!du 'Hello World!',0
EndProcedure
Main()
End
muss die Code Sektion den Write-Flag gesetzt haben!
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Möglichkeit, DATA im Code zu schreiben ?
@Mijikai: Wieso schlägst du im Anfänger-Forum etwas mit ASM vor, wo es locker vermieden werden kann? Und mit der Verschlüsselung hast du dann immer noch nicht geholfen.
Ohne ASM geht es auch so:
Da Purebasics Strings pro Zeichen aus zwei Bytes bestehen, muss man beim Verschlüsseln und Entschlüsseln aufpassen wie man das genau tut, denn die String-Länge ist dann nur halb so lang wie die Länge des Strings im Speicher als Bytes. Deswegen habe ich in meinem Beispiel noch eine Möglichkeit für ASCII-Strings eingebaut.
Trotzdem, für's Verschlüsseln hilft das jetzt noch nicht. Aber dafür habe ich dir oben ja schon etwas verlinkt.
Ohne ASM geht es auch so:
Code: Alles auswählen
EnableExplicit
Debug PeekS(?blob_unicode)
Debug PeekS(?blob_ascii, -1, #PB_Ascii)
DataSection
blob_unicode:
Data.s "Hello World!"
blob_ascii:
Data.a 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', 0
EndDataSection
Trotzdem, für's Verschlüsseln hilft das jetzt noch nicht. Aber dafür habe ich dir oben ja schon etwas verlinkt.
Re: Möglichkeit, DATA im Code zu schreiben ?
NicTheQuick hat geschrieben: ↑07.06.2021 13:52 Die DataSection und Strukturen sind zwei grundlegend verschiedene Dinge. Wie meinst du das, dass du vieles auch mit Strukturen machen könntest?
Hallo,
ich möchte verschiedene Locations anlegen, die ich mit einem String beschreiben will.
Dafür könnte ich eine Struktur Locations anlegen mit einem Feld z.b. locations/beschreibung
und da den String ablegen.
Würde mir eigentlich besser gefallen, da intuitiver. Die Frage ist nun, ob es irgendwelche Vorteile bringt, die Strings per Data-Section anzulegen
und einzulesen (Geschwindigkeit ?)
Re: Möglichkeit, DATA im Code zu schreiben ?
@Nic & Mijikai
Vielen Dank erstmal für die schnelle Antwort, allerdings verstehe ich das mit den Codes nicht so recht !
Mit peekS und ?label ist interessant, so auf die Datasection zuzugreifen, aber mir geht es ja darum,
irgendwie aus (später verschlüsselten) Strings DATA-Statements zu erzeugen.Man hat irgendwie das Henne-Ei-Problem:
ich könnte die Strings unverschlüsselt in DATA ablegen, müsste sie nach der verschlüsselung aber wieder irgendwie in DATA zurückschreiben,denn sie sollen ja verschlüsselt in Data stehen.
Die Tools sehen interessant aus.
Vielen Dank erstmal für die schnelle Antwort, allerdings verstehe ich das mit den Codes nicht so recht !
Mit peekS und ?label ist interessant, so auf die Datasection zuzugreifen, aber mir geht es ja darum,
irgendwie aus (später verschlüsselten) Strings DATA-Statements zu erzeugen.Man hat irgendwie das Henne-Ei-Problem:
ich könnte die Strings unverschlüsselt in DATA ablegen, müsste sie nach der verschlüsselung aber wieder irgendwie in DATA zurückschreiben,denn sie sollen ja verschlüsselt in Data stehen.
Die Tools sehen interessant aus.
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Möglichkeit, DATA im Code zu schreiben ?
Was genau ist denn dein eigentlicher Plan? Warum muss es die Datasection sein? Zum Schreiben ist die eigentlich nicht gedacht. Vor allem bleibt das Geschriebene ja nicht da, wenn du das Programm erneut startest. Du kannst die Daten nur von Anfang an in das Kompilat mit einbringen.
Und wenn du Strukturen über Datasections legen willst, dann musst du wissen, dass Strings in der Struktur nur ein Pointer auf den eigentlichen String sind und der String somit nicht aus der Datasection ausgelesen werden würde. Deswegen haben wir PeekS benutzt.
Ich glaube es ist einfacher, wenn du uns erklärst, was du eigentlich vor hast. Denn auch die Sache mit dem Ver- und Entschlüsseln bringt ja zum Beispiel nichts, wenn der Schlüssel dazu selbst im Kompilat ist.
Und wenn du Strukturen über Datasections legen willst, dann musst du wissen, dass Strings in der Struktur nur ein Pointer auf den eigentlichen String sind und der String somit nicht aus der Datasection ausgelesen werden würde. Deswegen haben wir PeekS benutzt.
Ich glaube es ist einfacher, wenn du uns erklärst, was du eigentlich vor hast. Denn auch die Sache mit dem Ver- und Entschlüsseln bringt ja zum Beispiel nichts, wenn der Schlüssel dazu selbst im Kompilat ist.
Re: Möglichkeit, DATA im Code zu schreiben ?
Dachte es beantwortet die Frage (zudem ist es nicht komplizierter als die Data.s Definition) -> Möglichkeit, DATA im Code zu schreiben ?NicTheQuick hat geschrieben: ↑08.06.2021 13:50 @Mijikai: Wieso schlägst du im Anfänger-Forum etwas mit ASM vor, wo es locker vermieden werden kann?
(In die Data Sektion kann natürlich auch geschrieben werden Read/Write ist Standart.)
Ok, das ist einfach.Franky_FR hat geschrieben: ↑08.06.2021 14:12 ...aber mir geht es ja darum,
irgendwie aus (später verschlüsselten) Strings DATA-Statements zu erzeugen.Man hat irgendwie das Henne-Ei-Problem:
ich könnte die Strings unverschlüsselt in DATA ablegen, müsste sie nach der verschlüsselung aber wieder irgendwie in DATA zurückschreiben,denn sie sollen ja verschlüsselt in Data stehen.
Die Tools sehen interessant aus.
Bei Strings enstehen oft Sonderzeichen und der verschlüsselte String ist kein String mehr.
Am besten das Ergebnis (die verschlüsselten Daten) mit mit ShowMemory() anzeigen lassen und dann als Roh Daten abspeichern.
(Bei Strings eventuell die Terminations Null nicht vergessen - wenn benötigt)
In PBs DataSection danach so einbinden:
Code: Alles auswählen
DataSection
RohDaten:
IncludeBinary "Rohdaten.bin"
EndeDerRohDaten:
EndDataSection
Anfang der Rohdaten: ?RohDaten
Größe der Rohdaten: (?EndeDerRohDaten - ?RohDaten)
Re: Möglichkeit, DATA im Code zu schreiben ?
Ich wollte, um Purebasic zu lernen, mal versuchen ein Grundgerüst eines Spiels zu schreiben, z.b. eines klassischen Adventures.NicTheQuick hat geschrieben: ↑08.06.2021 15:13 Was genau ist denn dein eigentlicher Plan? Warum muss es die Datasection sein? Zum Schreiben ist die eigentlich nicht gedacht. Vor allem bleibt das Geschriebene ja nicht da, wenn du das Programm erneut startest. Du kannst die Daten nur von Anfang an in das Kompilat mit einbringen.
Und wenn du Strukturen über Datasections legen willst, dann musst du wissen, dass Strings in der Struktur nur ein Pointer auf den eigentlichen String sind und der String somit nicht aus der Datasection ausgelesen werden würde. Deswegen haben wir PeekS benutzt.
Ich glaube es ist einfacher, wenn du uns erklärst, was du eigentlich vor hast. Denn auch die Sache mit dem Ver- und Entschlüsseln bringt ja zum Beispiel nichts, wenn der Schlüssel dazu selbst im Kompilat ist.
Dazu wollte ich einfach 3-4 "Räume" anlegen, und die Beschreibung dieser erfolgt ja mit Strings, z.b "Du befindest dich auf einem Pfad".
Das könnte ich mit Strukturen machen: Struktur Raum, Raum/Beschreibung, Raum/Exits ect. Die Frage stellte sich mir nun, ob das Anlegen einer String-Datasection dem gegenüber einen Vorteil bringen würde, z.b. Geschwindigkeit.Es muss ja einen Grund geben für die Teilung Code-Section/Data-Section.
Die zweite Frage war halt das verschlüsseln der Strings, ich hoffte nach Verschlüsselung in Main mit einer Prozedur die DATAs erzeugen zu können.
Macht aber wohl wirklich nicht viel Sinn, da die unverschlüsselten Strings dann ja auch im Hauptprogramm stehen Würden, also geht es wohl nur über externe Tools. Wobei eine Prozedur zum erzeugen DATA schon interessant wäre, die Tools müssen das ja auch irgendwie machen.
Re: Möglichkeit, DATA im Code zu schreiben ?
Ok, das ist einfach.
Bei Strings enstehen oft Sonderzeichen und der verschlüsselte String ist kein String mehr.
Am besten das Ergebnis (die verschlüsselten Daten) mit mit ShowMemory() anzeigen lassen und dann als Roh Daten abspeichern.
(Bei Strings eventuell die Terminations Null nicht vergessen - wenn benötigt)
In PBs DataSection danach so einbinden:
Um die Daten wieder auszulesen die Labels benutzen.
Anfang der Rohdaten: ?RohDaten
Größe der Rohdaten: (?EndeDerRohDaten - ?RohDaten)
[/quote]
ShowMemoryViewer ist natürlich eine interessanter Ansatz, danke für den Tip, PB bietet so viele Möglichkeiten und Befehle.
Wenn ich in der Rohdaten.bin mehrere Strings habe, wie kann ich eingentlich auf einen einzelnen String darin zugreifen ?
Ist mir im Moment nicht klar. Ansonsten müsste ich für jede Beschreibung eine eigene .bin erstellen. Als Anfänger wirklich alles sehr schwierig.
Bei Strings enstehen oft Sonderzeichen und der verschlüsselte String ist kein String mehr.
Am besten das Ergebnis (die verschlüsselten Daten) mit mit ShowMemory() anzeigen lassen und dann als Roh Daten abspeichern.
(Bei Strings eventuell die Terminations Null nicht vergessen - wenn benötigt)
In PBs DataSection danach so einbinden:
Code: Alles auswählen
DataSection
RohDaten:
IncludeBinary "Rohdaten.bin"
EndeDerRohDaten:
EndDataSection
Anfang der Rohdaten: ?RohDaten
Größe der Rohdaten: (?EndeDerRohDaten - ?RohDaten)
[/quote]
ShowMemoryViewer ist natürlich eine interessanter Ansatz, danke für den Tip, PB bietet so viele Möglichkeiten und Befehle.
Wenn ich in der Rohdaten.bin mehrere Strings habe, wie kann ich eingentlich auf einen einzelnen String darin zugreifen ?
Ist mir im Moment nicht klar. Ansonsten müsste ich für jede Beschreibung eine eigene .bin erstellen. Als Anfänger wirklich alles sehr schwierig.