2016-01-26 16 views
13

Recentemente sto indagando sui motivi per la corruzione del file binario. In particolare, abbiamo un'app per Android, la parte nativa può leggere/scrivere file binari su scheda SD. A volte, il file binario corrompe per ragioni sconosciute. Abbiamo raccolto alcuni di questi file da diversi utenti e trovato alcuni fatti interessanti.Quali sono i possibili motivi per la corruzione di file binari su dispositivi Android

Un tipo di danneggiamento di maggioranza è che vengono cancellati i primi 4096 byte del file binario. Quando eseguo l'hexdump di questi file, i primi 4096 byte sono tutti zeri. Non più di 4096 o meno di 4096, ma esattamente 4096 byte. Penso che non sia una coincidenza. So che 4096 byte hanno una dimensione di pagina. Ma senza esperienza, non riesco a capire il motivo e, cosa più importante, non so come evitare tali cose per altri utenti/dispositivi.

Oltre a ciò, nel mezzo di alcuni file binari, ci sono anche alcuni segmenti di zeri continui, che non dovrebbe essere lì. Se non è il bug del nostro programma, ci sono dei possibili motivi che potrebbero essere collegati al kernel della piattaforma/dispositivo, o qualsiasi altra cosa come il dispositivo improvvisamente fuori dal potere?

Spero che chiunque abbia vissuto situazioni simili possa darmi qualche suggerimento/consiglio/soluzioni ecc. Questo mi ha davvero confuso molto.

Molte grazie ~

+0

assicurarsi tutte le operazioni di file come file aperto e il file vicino accada correttamente nel ciclo di vita delle applicazioni. –

+0

per la copia di file binari in Android: http://stackoverflow.com/a/11212942/2183287 –

+0

Fai attenzione alle posizioni in cui scrivi i tuoi dati, forse stai cercando di scrivere su alcune posizioni di memoria illegali e il kernel si occupa automaticamente di quella. –

risposta

3

Ho una certa esperienza del genere nel alcune applicazioni embedded che binari corrotti. Prima di tutto, controlla la gestione dei file (specialmente negli ambienti multithreading), immagino che tu l'abbia fatto a fondo. Quindi, prova a sincronizzare tutti gli scritti. Il kernel di Linux non scrive come si scrive l'app per scrivere, ma memorizza i dati prima di eseguire il flush su disco.

http://linux.die.net/man/2/sync

Spero che questo aiuti.

1

controllare la vostra gestione questo è di solito il problema di file nella mia esperienza

1

file rotti, o anche file di sistema danneggiato sono stranamente provocato dalle '4096 file byte.

Questo danneggiamento è dovuto alle dimensioni del cluster per il file system ext4 che è uguale alla dimensione della pagina.

Al momento, la dimensione predefinita di un blocco è 4KiB, che è una dimensione di pagina comunemente supportata nella maggior parte degli hardware compatibili con MMU. È una fortuna, poiché il codice ext4 non è preparato per gestire il caso in cui le dimensioni del blocco superano le dimensioni della pagina.

PS

sto prendendo ext4 in quanto è il file system predefinito per basato su Linux sistemi operativi (inclusi ma non limitati ad Android)

Ora fuori per i motivi per cui potrebbe la Il file 4KiB è pericoloso, i motivi sono semplici da comprendere:

  • Gestione file non valida: procedura errata nella creazione, nella lettura , la modifica o l'eliminazione dei file potrebbe danneggiare i file e romperli magari insieme al file system completo. Queste "procedure improprie" includono comportamenti non umani e incidenti.(PS: questo non è limitato ai file 4KiB)
  • Trattamento dati a basso livello improprio: non è un caso comune, tuttavia, è possibile. Ciò accade quando il kernel o l'utente sta tentando di modificare il file system a basso livello. (Avrete bisogno di indagare ulteriormente su questo caso come dovrebbe essere scritto in un articolo troppo lungo!)
  • Ci sono ancora molti modi strani per ottenere dati rotti, sto cercando di mantenere breve. Gli altri motivi dipendono da molti fattori, quindi ho menzionato le cause più comuni per quel problema su un dispositivo Android.

È possibile continuare a leggere di più qui:

  • Ext4 Disk Layout: Tutto quello che un ricercatore ha bisogno di conoscere Ext4
  • Exfat file system: intuizione exFAT! Un altro file system comunemente usato (anche con Android) che è noto per essere troppo vulnerabile!
  • ...
Problemi correlati