Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  16 1226
C/cpp Noen som har en god oversikt med eksempler over størrelser og objekter funker?

Jeg tenker da på strengmanipulering og hva som er peker til objekt og hva som er verdier i et objekt, etc

Trenger en oppfriskning.

Hvordan kan jeg lese inn ei fil binært og tildele navn til div offsets, etc
Sist endret av fxxked; 9. juli 2011 kl. 00:49.
m0b
m0b's Avatar
DonorAdministrator
Nå har jeg riktignok promille, men jeg er egentlig litt usikker på om det er ett spørsmål du stiller her, eller om det er flere. Hva er formålet, skal du lese inn en binær-fil som du skal instansiere i objekt? Vil du bare ha en oppfriskning i hvordan strenger fungerer? Hva mener du med størrelser på objekter, egentlig? Er det størrelse i form av antall bytes minne instansen av et objekt krever - og i så tilfelle, inkluderer dette størrelsen til instansen av de eventuelt andre referansene/pekerne som objektet måtte kunne ha?

Tror enten du må være litt mer presis i spørsmålet ditt, eller jeg litt mer edru. Ikke vet jeg.

Hvis det første spørsmålet mitt kan besvares med "ja", så brukte i alle fall jeg bare hex-workshop (kan forsåvidt også bare bruke diff) til å finne ut hvordan objektene i filen til profilen i Outlook Express egentlig kunne representeres. På den tida var dette i alle fall udokumentert informasjon, og jeg måtte reverse filformatet selv. Er det noe slikt du holder på med?
Sist endret av m0b; 9. juli 2011 kl. 03:28.
Jeg sitter her med noen PS2 og PS3 save games, jeg ønsker å lage savegame editor, filene er binærfiler, jeg ønsker å lage structs som jeg laste filene inn i.

Slik at verdier kan hentes ut med: savegame->energi o l

Sitat av |d13m0b Vis innlegg
Hva mener du med størrelser på objekter, egentlig? Er det størrelse i form av antall bytes minne instansen av et objekt krever - og i så tilfelle, inkluderer dette størrelsen til instansen av de eventuelt andre referansene/pekerne som objektet måtte kunne ha?
Vis hele sitatet...
Her er noen eksempler på antatte størrelser

Kode

OLD 
The PFD File
- size is 0x8000 (32768) bytes 
- 8 byte magic start [REST 32760]
- 8 byte version or sth like that [REST 32752]
- 80 unkown bytes [REST 32672]
- 480 bytes of repeating signature [REST 32192]
- structure for each file is 0x110 (272) bytes
- file can have 113 secured files 0x7810 (30736) bytes for file structures ;-) matches [REST 1456]
- last strucure is only zeros size 0x110 (272) bytes [REST 1184] 
- 22 bytes unkown data [REST 1162]
- repeating 20 byte long data 56 times 0x460 (1120) bytes [REST 42]
- 42 times 0x00 [0x2A (42) bytes] [REST 0]
END OLD 

PFD
=> Magic Start (0x000000000050464442) [4 times 0x00 and PFDB]
=> DUMMY (0x00000000000000) [7 times 0x00]
=> Version ?!?! (0x03)
=> unkown (80 bytes)
=> 60 times 8 byte unkown data 
CAN BE
(0x0000000000000000) [7 times 0x00 and 0x00] OR
(0x0000000000000001) [7 times 0x00 and 0x01] OR
(0x0000000000000002) [7 times 0x00 and 0x02] OR
(0x0000000000000039) [7 times 0x00 and 0x39 (ASCII 9)] OR
(0x0000000000000072) [7 times 0x00 and 0x72 (ASCII r)]

NOW comes an intressting structure
first struct is for the SFO and then 113 reserved for the max possible encrypted files in a save game
114 times struct sizeof is 272 bytes
{
=> 8 byte struct start?!?!?! (0x0000000000000072) [7 times 0x00 and 0x72 (ASCII r)]
=> x Byte filename buffer
=> 1 Byte 0x00 (to end the string)
=> 16 Byte repeating data for every File (due to the example mostly same key is used for every file. Maybe its our key)
=> x Byte unkown data
}
=> Huge number of 0x00 i guess it is a buffer because one save file can have only 113 encrypted files -.- what a sick number in my opinion.

=> 1142 bytes of unkown data

=> 42 times 0x00
Jeg ønsker da etter å ha kartlagt de forskjellige parameterne å bruke begreper som savegame->energi++ eller savegame->energi-- om mulig, kanskje det må skrives på en annen måte?
Jeg ser heller ikke helt hva du lurer på.. Lurer du på hvordan du leser fra en binærfil? I så fall bugner det av beskrivelser av det på nettet. Du må opprette en ifstream, åpne filen som binærfil og lese blokker med data inn i chars som du så caster til riktig datatype.

Eller lurer du på syntaks for å beskrive objekter? Structs, som du nevner, er én måte å gjøre det på. Klasser er en annen. Forskjellen er ikke så stor, men det er vanligst å bruke klasser med metoder for å manipulere interne data. Informasjon om dette finner du i grunnleggende C++ tutorials, så det er lettere om du leser en av de i stedet for at jeg skriver en egen en her (spesielt når jeg ikke en gang vet om det er det du lurer på).

Forresten, piloperatoren -> er for å implisitt dereferere pekere for å henvise til objektet pekeren peker til, mens du sannsynligvis er ute etter en vanlig "punktumoperator" (med mindre "savegame" skulle være en peker, selvsagt).
Den kjappeste veien til et svar på det jeg lurer på er nok et eksempel på hvordan man leser en binær prefsfil inn i en struct evt et objekt.
Sist endret av fxxked; 9. juli 2011 kl. 10:39.
Prøv noe slik (ikke testet, så se opp for syntaksfeil og andre småting):

Kode

#include <fstream>

using namespace std;

struct Prefs{
	char a;
	int b;
}

int main(int argc, char* argv[]){
	Prefs prefs;
	ifstream file("filename", ios::in | ios::binary);
	
	file.read(reinterpret_cast(&(prefs.a)), sizeof(char));
	file.read(reinterpret_cast(&(prefs.b)), sizeof(int));
	
	return 0;
}
Sist endret av Provo; 9. juli 2011 kl. 11:21.
Jeg får inntrykket at du snakker om pekere (pointers) og navigering av minneområder?

Dvs. du leser hele fila inn i minnet og så parser du igjennom bit for bit?
Det som trengs først er å lese inn fila slik enten Provo beskriver, eller inn i et tilfelle av et objekt.

Etterpå må jeg gjøre det motsatte, skrive innholdet i struct eller objekt tilbake.

I mellomtida ville det vært greit å manipulert verdiene, noe av det jeg roter mest med i C er &før og etter&, samt * og hvordan de kan brukes enten som %ptr++ flytter man da "cursor" på hvor man peker? Eller øker man verdien som "cursor" peker på?

Jeg har lett etter eksempler men finner kun tekst( aka conf ) og XML varianter.
Sist endret av fxxked; 9. juli 2011 kl. 16:50.
Sitat av fxxked Vis innlegg
Det som trengs først er å lese inn fila slik enten Provo beskriver, eller inn i et tilfelle av et objekt.
Vis hele sitatet...
Du kan prøve å strukturere dataene i klassen på en måte som matcher dataene i filen du skal lese og deretter lese hele filen inn i objektet i ett jafs, men jeg stiller meg skeptisk til om det vil fungere (du har så vidt jeg vet ingen garanti for at minneplasseringene av variablene tilsvarer deklarasjonsplasseringene i koden).

Sitat av fxxked
Etterpå må jeg gjøre det motsatte, skrive innholdet i struct eller objekt tilbake.
Vis hele sitatet...
Da lager du en ofstream og bruker write( ), omtrent på samme måte som du bruker read( ) for å lese.

http://www.cplusplus.com/reference/i...ostream/write/

Sitat av fxxked Vis innlegg
I mellomtida ville det vært greit å manipulert verdiene, noe av det jeg roter mest med i C er &før og etter&, samt * og hvordan de kan brukes enten som %ptr++ flytter man da "cursor" på hvor man peker? Eller øker man verdien som "cursor" peker på?

Jeg har lett etter eksempler men finner kun tekst( aka conf ) og XML varianter.
Vis hele sitatet...
http://www.cplusplus.com/doc/tutorial/pointers/
Sist endret av Provo; 9. juli 2011 kl. 16:57.
:(){ :|:& };:
tripflag's Avatar
Du er klar over at PS3 savegames er krypterte og dekrypteres i realtime av gameOS når de benyttes, rite?

Eller kanskje dem har greid å komme rundt dette også nå, noe som ville vært fryktelig artig egentlig!
Noen savegame er krypterte utover det som gjøres i GameOS automatisk, min greie skal kjøre i GameOS og vil automatisk benytte dekrypteringen som er i GameOS uten at jeg trenger å bry meg.

Jeg har lett etter eksempler men finner kun programmer som bruker tekst( oks conf ) og XML varianter( ala plist. )
Sist endret av fxxked; 9. juli 2011 kl. 17:02.
:(){ :|:& };:
tripflag's Avatar
Tøft! Ønsker deg lykke til på prosjektet, dette hadde vært gromme saker.

Jeg for min del hadde vært storfornøyd med noe så enkelt som en hexeditor som viser diff mellom to forskjellige savegames, men du har kanskje planer om å gjøre det enda mer elegant enn som så? Uansett ser jeg frem til resultatet.
Jeg har brukt xxd i kombinasjon med diff for å sammenligne.

Vil egentlig få opp de forskjellige verdiene som er lagret og mulighet for å justere dem, men det er litt mye å sette seg inn i per spill, jeg er bare nysgjerrig på hvordan disse savegamene er satt sammen og kommer nok ikke til å lage noe mer enn et bibliotek dersom jeg lykkes.
Sist endret av fxxked; 9. juli 2011 kl. 20:42.
m0b
m0b's Avatar
DonorAdministrator
Jeg vil tro at filformatet til savegames og slikt fortsatt den dag i dag er forskjellig fra spill til spill. Du vil derfor ikke få noen forhåndsdefinerte strukturer som du kan forholde deg til når du "caster" et savegame til objekt - hvis dette lar seg gjøre med det gitte spillet. Her må man nesten bare se an hvem som har utviklet dette. Hvis det er Sony, så, vel. Feltet du har snublet over er i seg selv et helt fagfelt og kan klassifiseres som reverse engineering. Når det gjelder dette er det en rekke forskjellige angrepsmetoder man bruker for å hente ut informasjon fra ikke-dokumenterte binære filformat, og det er ikke alltid like enkelt når disse kan både være komprimerte og krypterte. Dette er et veldig interessant felt å jobbe med, så det er mulig du har mye moro framfor deg hvis dette faller innenfor din interesse.

http://upe.acm.jhu.edu/websites/John...e/reverse.html
http://stackoverflow.com/questions/4...y-file-formats
http://www.iwriteiam.nl/Ha_HTCABFF.html
http://en.wikibooks.org/wiki/Reverse...g/File_Formats
Sist endret av m0b; 9. juli 2011 kl. 22:46.
Jada, mye å klø seg i pappen på her, feltet har jeg vært innom før den biten drev jeg en del med i 1998/99 da vi laget hxd m/HOPE.

Jeg ville brukt python eller objective-c om jeg kunne laget dette på en datamaskin, cluet er at det må kjøres i GameOS, og derfor må jeg bevege meg litt utenfor XCode eller vim. Jeg må faktisk kompilere og installere for hver gang.

Jeg ser at devin holder på med sin fork fortsatt: http://synhxd.sf.net/
m0b
m0b's Avatar
DonorAdministrator
Gjelder dette PS3? I såfall har jeg en selv som jeg kanskje kunne kartlagt litt mer på, hvis du har litt mer informasjon om hva du gjør. Er det modifikasjoner som i såfall må gjøres på PS3en dersom dette lar seg gjøre på den, hvor finner jeg mer om dette? Dette er hack-value.

Forutsatt at jeg har forstått deg rett
Sist endret av m0b; 9. juli 2011 kl. 23:03.
fxxked's Avatar
Trådstarter
Pure( 33 KB ) ser ut til å kunne fungere, det samme gjelder nok Uncharted( 164 KB ) også,
men Tekken 6( 13.6MB ) ser litt stor ut i første omgang.
Sist endret av fxxked; 10. juli 2011 kl. 11:18.