Seite 1 von 2
Residents file auslesen.
Verfasst: 31.01.2017 21:28
von _JON_
Hallo Leute,
Habe mal eine Frage bezüglich der Resident files die man mit PB erstellen kann,
welche Konstanten und Strukturen im binarer Form speichern.
Ist dass eine Einbahnstraße oder kann man den Inhalt auch wieder auslesen,
also wieder eine *.pb Datei draus machen?
Re: Residents file auslesen.
Verfasst: 01.02.2017 13:24
von xXRobo_CubeXx
Das is leider nicht möglich!
Hast du n Resident file erstellt und den Quell Code gelöscht ? Versuchs mal mit einen Rettungsprogramm!
Oder habe ich deine Frage falsch verstanden ? Bin schon sehr müde muss erstma pennen gehn...

Re: Residents file auslesen.
Verfasst: 01.02.2017 14:41
von C h r i s :)
Re: Residents file auslesen.
Verfasst: 01.02.2017 15:19
von NicTheQuick
Natürlich geht das. Purebasic muss es selbst doch auch können. Ich glaube im englischen Forum hat das sogar mal jemand gemacht, ich finde es nur gerade nicht. Vielleicht findest du es ja selbst.
@xXRobo_CubeXx:
Wenn du keine Lösung kennst und lieber falsch behauptest es gehe nicht, solltest du vielleicht lieber nichts sagen? Oder wolltest du nur dein "tolles" GIF posten?
Re: Residents file auslesen.
Verfasst: 01.02.2017 16:11
von xXRobo_CubeXx
Tut mir leid NicTheQuick

ich meine irgendwo gelesen zu haben das es nicht möglich ist weil es kompiliert sei oder so.

Dan hab ich das wohl mit etwas anderes verwechselt.

war keine Absicht! War das Userlib die man nicht dekompilieren kann ?

Tut mir leid NicTheQuick ich habe das schein bar verwechselt. Sei mir bitte nich böse. Sorry nochmal.

Bist du noch sauer auf mich ?

Re: Residents file auslesen.
Verfasst: 01.02.2017 16:44
von _JON_
Ja, im englischen Forum gibt's ein
Residents dumper
Der funktioniert allerdings überhaupt nicht oder die Struktur hat sich mittlerweile geändert,
ist ja auch schon 10 Jahre alt.
Auch warum dokumentiert man so ein Format nicht
Naja, wenn Ich mal etwas zu viel Zeit habe schreib Ich mal einen vernümftigen Dumper.
Re: Residents file auslesen.
Verfasst: 01.02.2017 17:22
von ts-soft
Dann würde ich den Compiler das überlassen. Das CompilerInterface kann u.a. auch die Strukturen und Konstanten
ermitteln.
Code: Alles auswählen
STRUCTURE<T><Name>
Request the content of a structure known by the compiler.
Parameters: The name of the structure.
Response : The structure definition, with each member on one line. The output is terminated by a line
containing 'OUTPUT<T>COMPLETE'.
sowie seit Version 5.10
Code: Alles auswählen
CONSTANTLIST (since 5.10)
Request a listing of all constants known by the compiler.
Parameters: none
Response : The first line contains the number of constants to return, then one constant
per line, using the following syntax: TYPE<T>NAME<T>VALUE.
TYPE can be one of the following value:
0: numeric value (quad)
1: float value (double)
2: string value
The output is terminated by a line containing 'OUTPUT<T>COMPLETE'.
Komplette erklärung des Compilerinterface im SDK, die Datei Compilerinterface.txt (was auch sonst

)
Re: Residents file auslesen.
Verfasst: 01.02.2017 17:32
von ts-soft
Hab hier noch einen Beispielcode für Strukturen:
Code: Alles auswählen
EnableExplicit
Structure strucMember
Name.s
List Members.s()
EndStructure
Structure strucName
List Name.strucMember()
EndStructure
Procedure GetStructures(*p.strucName)
Protected.i Compiler = RunProgram(#PB_Compiler_Home + "Compilers\pbcompiler", "/STANDBY", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Hide)
Protected.s tmp, Text
If Compiler
If IsProgram(Compiler)
Repeat
tmp = ReadProgramString(compiler)
Until tmp = "READY"
WriteProgramStringN(Compiler, "STRUCTURELIST")
Repeat
Text = ReadProgramString(Compiler)
If Text <> "OUTPUT" + #TAB$ + "COMPLETE"
AddElement(*p\Name())
*p\Name()\Name = Text
EndIf
Until Text = "OUTPUT" + #TAB$ + "COMPLETE"
FirstElement(*p\Name())
DeleteElement(*p\Name())
ForEach *p\Name()
WriteProgramStringN(Compiler, "STRUCTURE" + #TAB$ + *p\Name()\Name)
Repeat
Text = ReadProgramString(Compiler)
If Text <> "OUTPUT" + #TAB$ + "COMPLETE"
AddElement(*p\Name()\Members())
*p\Name()\Members() = Text
EndIf
Until Text = "OUTPUT" + #TAB$ + "COMPLETE"
Next
WriteProgramStringN(Compiler, "END")
CloseProgram(Compiler)
EndIf
EndIf
EndProcedure
Define.strucName structs
GetStructures(@structs)
With structs
ForEach \Name()
Debug "Structure " + \Name()\Name
ForEach \Name()\Members()
Debug " " + \Name()\Members()
Next
Debug "EndStructure"
Debug ""
Next
EndWith
Re: Residents file auslesen.
Verfasst: 01.02.2017 17:38
von _JON_
Danke ts-soft
Der Compiler kann das natürlich.
Also kurzer Hand mal alle anderen Residents in den Papierkorb verschoben
und was spukt der Compiler aus, die Strukturen meiner *.res
Das gleiche noch mal wiederholt mit CONSTANT und CONSTANTLIST und der Tag ist gerettet

Re: Residents file auslesen.
Verfasst: 01.02.2017 19:00
von NicTheQuick
Verrückt, ich krieg hier unter Linux folgende Meldung (nach Anpassen der Pfade und Parameter natürlich):
Code: Alles auswählen
STARTING 5.50 PureBasic 5.50 (Linux - x64)
ERROR Can't load OS libraries, please re-install PureBasic.
Klappt ja super.
Na ich brauche es ja auch nicht, ich wollte nur mal gucken, ob es funktioniert.