Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-09-2017, 09:24   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
[C++] Player di File System

ciao,
l'idea mi è venuta per risolvere un problema su un disco il cui file system è VxFS di Veritas. Cercando in rete ho trovato l'header che credo rappresenti la struttura di tale file system però, prima di tentare qualcosa magari troppo oneroso in termini di tempo, vi chiedo se qualcuno ha già sperimentato programmazione del genere e magari, sgambiarci due idee costruttive.

Preciso che non ho intenzione di scrivere codice che accede al drive in quanto, attraverso una utility (g4l), mi sono procurato un file raw che rappresenta di fatto il contenuto dell'intero HD; ora si tratta di capire come è strutturato per leggere file e directory.

Grazie
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2017, 16:29   #2
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da Bellaz89 Guarda i messaggi
Non ne so molto, ma il file che hai postato fa parte del driver di linux di Vxfs

Se vuoi divertirti o scrivere un reader/writer per fare altre cose puoi guardare gli altri sorgenti presenti nella directory del header.

Se vuoi leggere il contenuto di quel filesystem non puoi provare a montarlo con una distro linux?
si, è il driver di linux ed è l'unico che ho trovato disponibile. La strada delle distro l'ho già tentata senza successo, quindi mi sono detto che scrivere un player senza avere la pretesa di scriverlo, una volta che si conosce la struttura del file system e non credo serva conoscerla tutta nei minimi dettagli, il gioco dovrebbe essere fatto: dovrebbe, uso il condizionale.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2017, 16:56   #3
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da misterx Guarda i messaggi
si, è il driver di linux ed è l'unico che ho trovato disponibile. La strada delle distro l'ho già tentata senza successo
Come mai non va? Linux implementa FreeVxFS e dovrebbe montare un volume del genere senza problemi. Magari e' corrotto? Ha bisogno di un fsck?

Riguardo l'implementazione di un lettore per quel filesystem, come hai gia' detto, le informazioni sono qui https://github.com/torvalds/linux/tr...er/fs/freevxfs

Alla fin fine si tratta di interpretare strutture dati, estrarre gli offset dei file interessanti, spostarsi in quella posizione sul drive fisico o sul file immagine che hai creato e prelevare i dati di quei file.

Implementa pure le extent, per cui puo' essere necessario leggere all'interno dei blocchi le info sugli offset di ulteriori blocchi. Cioe' non tutte le informazioni utili per reperire tutti i blocchi le trovi nella "FAT"/inode.
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2017, 17:12   #4
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da pabloski Guarda i messaggi
Come mai non va? Linux implementa FreeVxFS e dovrebbe montare un volume del genere senza problemi. Magari e' corrotto? Ha bisogno di un fsck?

Riguardo l'implementazione di un lettore per quel filesystem, come hai gia' detto, le informazioni sono qui https://github.com/torvalds/linux/tr...er/fs/freevxfs

Alla fin fine si tratta di interpretare strutture dati, estrarre gli offset dei file interessanti, spostarsi in quella posizione sul drive fisico o sul file immagine che hai creato e prelevare i dati di quei file.

Implementa pure le extent, per cui puo' essere necessario leggere all'interno dei blocchi le info sugli offset di ulteriori blocchi. Cioe' non tutte le informazioni utili per reperire tutti i blocchi le trovi nella "FAT"/inode.
infatti è corrotto e le varie distro provate da me vxfs non lo vedono nella maniera più assoluta. Ho installato anche opensolaris e niente.
L'unica via è studiarsi la struttura vxfs e provare a leggere.

Unico dubbio è l'offset del file raw da 9 GB: da che byte si inizia a leggere?
Osservando la struct vxfs_sb { } sembra dall'inizio e poi attraverso i vari campi ci si sposta nelle directory e nei vari file e qui, ci sarà un qualche campo, a modi albero binario, che dice dove si trovano i vari blocchi che costituiscono il file di interesse in quanto, potrebbe essere sparpagliato nei vari cluster.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2017, 08:50   #5
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da misterx Guarda i messaggi
Unico dubbio è l'offset del file raw da 9 GB: da che byte si inizia a leggere?
Identifica il superblocco. Dovrebbe trovarsi all'offset 8192. Se non vuoi usare un valore hardcoded, cerca il magic VXFS_SUPER_MAGIC che e' 0xa501FCF5.

Li' dentro ci sono i valori vs_emap e vs_imap che indicano gli offset della mappa delle extent e degli inode. La struct del superblocco e' definita nel file vxfs.h.

Se non ti trovi a tuo agio a spulciare il codice, procurati il libro Unix Filesystems di Pate, ex dipendente Veritas, proprio gli ideatori di VxFS. Li' c'e' un capitolo molto dettagliato proprio su questo filesystem.
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2017, 11:39   #6
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
grazie ad entrambi, mi viene un dubbio: l'hd era collegato ad un PC HP con cpu risc e se non ricordo male, dovrebbe entrare in gioco l'ordine dei bit bigendian e littlendian o non è così?

Ultima modifica di misterx : 07-09-2017 alle 06:23.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2017, 15:02   #7
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
a partire dal byte 8192 non trovo nulla, quindi ho effettuato una ricerca ed il risultato è il seguente:

offset=103485792 A501FCF5
offset=119226720 A501FCF5
offset=148194816 A501FCF5
offset=366755852 A501FCF5
offset=367833092 A501FCF5
offset=368476932 A501FCF5
offset=368478084 A501FCF5
offset=472752132 A501FCF5
offset=476155908 A501FCF5
offset=2725093380 A501FCF5
offset=2726662148 A501FCF5

ci sono più superblocchi, forse una sorta di backup?

la stranezza è che facendo un fseek con 368478084 diminuendo il risultato di 4 byte fseek( fp, 368478080, SEEK_SET ); ottengo:

magic number = F5FC01A5 (ordine inverso)
block size = 56
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2017, 15:13   #8
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da misterx Guarda i messaggi
ci sono più superblocchi, forse una sorta di backup?
Si, i superblocchi hanno parecchi backup. Il primo e' quello normalmente usato.

Quote:
Originariamente inviato da misterx Guarda i messaggi
la stranezza è che facendo un fseek con 368478084 diminuendo il risultato di 4 byte fseek( fp, 368478080, SEEK_SET ); ottengo:

magic number = F5FC01A5 (ordine inverso)
block size = 56
Tieni conto dell'endianness. x86 e' little endian dopo tutto e a te serve per forza usare tipi word o quad word per estrarre gli offset.
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2017, 16:52   #9
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da Bellaz89 Guarda i messaggi
Domanda: non e' che ci sono piu' partizioni?

In ogni caso a questo punto la cosa migliore e' mappare la struttura vxfs_sb in corrispondenza dei magic number e vedere cosa ne viene fuori
ahi, le partizioni non le ho verificate.

è il magic number non mi convince.
Cercando con ultraedit nel raw file per sincerarmene, ne trovo n, e li trovo anche nella medesima posizione con un semplice programma in C dove ho implementato un semplice buffer LIFO questo in quanto, il magic number non si trova ad una distanza partendo da zero divisibile per 4, si devono costruire parole da 4 byte scorrendo i byte uno ad uno e scartando ogni volta il primo entrato nel buffer: sistema arcaico ma funziona.

Però, ottenuti gli offset, il primo a 8192 ci può stare che sia andato perduto forse dopo una esecuzione maldestra del comando fsck -F vxfs -a full ...... ma, non mi è chiaro come mai riesco a trovari i magic number nell'ordine 0xa501FCF5 ma quando poi effettuo il salto con la fseek e riempio la struttura struct vxfs_s e visualizzo il campo vs_magic, questo è reversato

Ultima modifica di misterx : 07-09-2017 alle 16:55.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2017, 18:53   #10
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da Bellaz89 Guarda i messaggi
Perche' e' strano che trovi il reverse? come hai detto anche tu questo accade a causa dell'endianess.
è strano ne lsenso che, se visualizzi il file raw con ultredit vedi il magic number little endian, se fai una lettura dal C con la fread hai big endian, magari mi sfugge qualcosa.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 10-09-2017, 12:51   #11
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da Bellaz89 Guarda i messaggi
Si ok.. ma come visualizzi la memoria letta con fread ? se fai printf("%x", magic_number); il numero dovrebbe essere visualizzato rigirato.
esatto!
Ma come mai ho queste differenze tra ultraedit e la printf?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 10-09-2017, 15:12   #12
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da Bellaz89 Guarda i messaggi
UltraEdit ti dovrebbe far vedere la memoria 'plain' ovvero byte per byte.
Quando leggi la memoria pero' a causa dell'endianness di x86 la cifra meno significativa e' la piu' a sinistra. di conseguen, visto che la visualizzazione avviene sempre in big endian, la printf ti rigira i byte. Non so se sono stato chiaro za la printf di "%x" che dovrebbe mostrare le cifre in formato big endian, rigira le cifre.

In parole povere: se hai un'area di memoria del genere su x86_64

.. AA BB CC DD ..

assegni questa memoria ad esempio ad un unsigned int e fai printf("%x");

Il risultato sara'

DDCCBBAA
sei stato chiaro, è una cosa che non sapevo.


printf("%x", c & 0xff);
fread(&c, sizeof(c), 1, fp);
printf("%x", c & 0xff);
fread(&c, sizeof(c), 1, fp);
printf("%x", c & 0xff);
fread(&c, sizeof(c), 1, fp);
printf("%x\n", c & 0xff);

ottengo quello che dici

Quindi tutto quello che leggo dal file raw va reversato in ambiente intel, è così?

Ultima modifica di misterx : 10-09-2017 alle 15:41.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 10-09-2017, 17:35   #13
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da Bellaz89 Guarda i messaggi
Yess, pero' solo a livello di tipo. la cosa che devi fare e' scrivere delle routine di conversione per i tipi del filesystem (solo gli int e eventualmente i tipi float).
quindi, per capire, va reversato tutto ciò che descrive i file, i vari offset, ma non i byte che rappresentano i file?

per la conversione little<->big uso questa già fatta da altri:

Codice:
swapped = ((num>>24)&0xff) | // move byte 3 to byte 0
                    ((num<<8)&0xff0000) | // move byte 1 to byte 2
                    ((num>>8)&0xff00) | // move byte 2 to byte 1
                    ((num<<24)&0xff000000); // byte 0 to byte 3
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2017, 12:34   #14
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
ci sto lavorando,
sto leggendo il libro di Pate ma lo trovo troppo superficiale, non esiste qualcosa di più approfondito che spieghi meglio le varie strutture come sono connesse tra loro?

p.s.
come non detto http://h20565.www2.hpe.com/hpsc/doc/...r_na-c05189468

Ultima modifica di misterx : 12-09-2017 alle 15:23.
misterx è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Dazi amari per i fan di Nintendo: in USA...
TECHly presenta quattro cavi USB-C da 60...
Sono i preferiti da chi ne capisce: AVM ...
Itch.io riapre ai giochi NSFW: nuove reg...
Clamoroso passo indietro di Google: non ...
La tua carriera è a rischio AI? Se fai u...
Fastweb+Vodafone: come l'operatore itali...
Tesla perde in tribunale: 329 milioni di...
Volete una NVIDIA GeForce MSI 5070 VENTU...
Caos ChatGPT: le chat private degli uten...
Tornano le scorte dei 2 portatili Lenovo...
Il telescopio spaziale James Webb ha cat...
Amazon scatenata nel weekend: sconti sug...
Pulizia per 45 giorni senza pensieri: il...
Apple taglia il prezzo degli AirPods Pro...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v