Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Zenfone 11 Ultra: il flagship ASUS ritorna a essere un 'padellone'
Recensione Zenfone 11 Ultra: il flagship ASUS ritorna a essere un 'padellone'
Zenfone 11 Ultra ha tantissime qualità interessanti, fra cui potenza da vendere, un display di primissimo livello, un comparto audio potente e prestazioni di connettività fra le migliori della categoria. Manca però dell'esclusività del predecessore, che in un settore composto da "padelloni" si distingueva per le sue dimensioni compatte. Abbiamo provato il nuovo flagship ASUS, e in questa recensione vi raccontiamo com'è andata.
Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA
Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA
Abbiamo partecipato ad Appian World 2024, evento dedicato a partner e clienti che si è svolto recentemente nei pressi di Washington DC, vicino alla sede storica dell’azienda. Nel festeggiare il 25mo anniversario, Appian ha annunciato diverse novità in ambito intelligenza artificiale
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini
Primo contatto con il monitor Lenovo ThinkVision 3D 27 che grazie a particolari accorgimenti tecnici riesce a ricreare l'illusione della spazialità tridimensionale senza che sia necessario utilizzare occhialini
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: 3594
[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: 3594
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: 3594
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: 3594
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: 3594
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: 3594
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: 3594
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: 3594
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: 3594
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: 3594
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: 3594
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 Zenfone 11 Ultra: il flagship ASUS ritorna a essere un 'padellone' Recensione Zenfone 11 Ultra: il flagship ASUS ri...
Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA Appian: non solo low code. La missione è ...
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini Lenovo ThinkVision 3D 27, la steroscopia senza o...
La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing La Formula E può correre su un tracciato ...
Lenovo LEGION e LOQ: due notebook diversi, stessa anima gaming Lenovo LEGION e LOQ: due notebook diversi, stess...
Sta per succedere! La prima gara a guida...
Parthenope: un nuovo RPG investigativo t...
Urbanista Malibu: ecco come va la cassa ...
Gas Station Simulator è costato 1...
AOC Graphic Pro U3, tre nuovi monitor pe...
Wacom Movink: per la prima volta il disp...
HPE Aruba presenta i nuovi access point ...
Lamborghini presenta Urus SE, prima vers...
Scuderia Ferrari e HP insieme: ufficiale...
Snapdragon X Plus, un nuovo SoC per i no...
L'iPad 10,9'' 64 GB è sceso a meno di 40...
Steam: basta ai furbetti dell'accesso an...
Motorola Edge 40 Neo con fotocamera da 5...
Arriva Kasperksy Next, la nuova gamma di...
Fallout, un successo senza fine: 1 milio...
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: 06:52.


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