Perché modificare direttamente i file binari?

2

Questa potrebbe essere una domanda ingenua, ma mi chiedo quando e perché gli sviluppatori (non di ricerca) potrebbero modificare direttamente un file binario.

Sembra che l'unica buona ragione per usarne uno sia creare un kludge quando hai bisogno di correggere e ridistribuire un binario non crittografato, e non puoi accedere al codice sorgente originale o all'archivio dati.

Ma in tutti gli altri casi, non riesco a immaginare dove questo si adatti a un processo di sviluppo. Tutte le modifiche diventerebbero discutibili nella build successiva e dovrebbero essere reimplementate nel codice sorgente.

    
posta William 09.04.2016 - 01:52
fonte

2 risposte

5

Why directly edit binary files?

Lo stesso motivo per cui gli scalatori scalano le montagne. Perché puoi.

<Rant about the name "Binary File">

Ogni volta che modifichi un qualsiasi tipo di file del computer, STI modificando un file binario. Il testo che stai leggendo in questo momento è memorizzato sul tuo computer come un file binario. Non lo si considera come un file binario solo perché è anche testo codificato. I file ASCII, i file UTF-8, sono tutti file binari.

Questo file binario è davvero un numero. Un numero lungo ma solo un numero. Si chiama binario perché è memorizzato come 1 e 0. Ciò significa che è espresso come numero di base 2. Potrei memorizzare il numero di questa risposta in DNA e avrebbe 4 coppie di basi. Sarebbe lo stesso numero. Ho appena espresso un po 'più breve e gooier.

Finché è lo stesso numero di come è memorizzato non è importante. Tuttavia, le persone vogliono fare una distinzione tra file di testo e file non di testo.

I file di testo hanno una codifica prevedibile, quindi possono essere presentati dalla maggior parte degli editor di testo nel modo in cui erano destinati a essere visti.

I file non di testo possono essere codificati in modo pazzesco, quindi possono essere presentati solo come originariamente previsto dal software a cui erano destinati o dal software che ha invertito il formato in modo che possano anche presentarli come originariamente destinato.

Questi file non di testo sono stati chiamati file binari. E loro sono. Ma lo sono anche i file di testo.

Ho intenzione di presumere che intendi: perché modificare direttamente file non di testo.

</Rant about the name "Binary File">

Se conosci il formato (i campi e il modo in cui sono codificati) di un file non di testo, ogni campo ha un significato per te. Allo stesso modo in un file di testo. Quindi puoi modificarlo per tutti gli stessi motivi per cui dovresti modificare un file di testo.

In effetti, l'unica ragione per cui non modificare questo file è perché non conosci il formato. Alcune aziende lo apprezzano in questo modo e cercano di impedirti di conoscere il formato in modo che possano controllare il loro prodotto. Gli utenti che possono vedere oltre questo si scrollano di dosso questo controllo poiché questo è il loro computer. In effetti, anche se questo post fosse bloccato, potresti controllare come appariva sul tuo computer smanettando il file che è stato scaricato sul tuo computer. Potresti farmi dire una cosa sciocca.

Ecco le basi. Ecco le cose di lusso.

It seems like the only good reason to use one is to create a kludge when you need to fix and redistribute an unencrypted binary, and can't access the original source code or data storage.

Un buon esempio di questo è dll hook . Una DLL è un insieme di funzioni compilate. Il tuo sistema operativo probabilmente ne ha alcuni. Uno di questi viene chiamato ogni volta che si preme un tasto. Se voglio installare un keylogger, mi piacerebbe modificare quel file 'binario' per chiamare la mia funzione in modo da poter registrare le tue battute.

Ecco perché non è una buona idea lasciare che chiunque modifichi i file "binari". Ma i file di testo eseguiti possono essere devastanti. Non permettere a nessuno di toccare il tuo file autoexec.bat o potrebbe semplicemente formattare il tuo disco rigido per divertimento.

But in all other cases, I can't imagine where this would fit in with regards to a development process. All the changes would become moot on the subsequent build, and would have to be reimplemented in source code.

In effetti, se il file binario è generato dal codice sorgente, in realtà è una pessima idea eseguire la modifica manualmente dopo una parte del processo di sviluppo. Dovresti essere in grado di costruire in un solo passaggio. Ma questo non ha nulla a che fare con il fatto di essere un file "binario". Qualsiasi file generato non dovrebbe essere manipolato manualmente con. QUALSIASI procedura manuale nel processo di costruzione è malvagia. Lavora duro per rimuoverli dal tuo processo di sviluppo. Non riuscirci significa che stai fallendo il secondo passaggio del test di Joel .

    
risposta data 09.04.2016 - 04:54
fonte
1

Per rispondere alla domanda sul motivo per cui qualcuno potrebbe voler fare una cosa del genere ... Sto lavorando su un controller incorporato che riceverà un file di configurazione binario tramite la sua UART. Un altro sviluppatore sta lavorando allo strumento che alla fine costruirà questo file di configurazione e lo riverserà in streaming. La sua fine non è finita, quindi mi piacerebbe creare manualmente un file che posso eseguire lo streaming con un programma terminale, solo per eseguire alcuni test di base sulla mia estremità. Il terminale che sto usando mi consentirà di inviare singole cifre in binario, ma è piuttosto doloroso. Mi consentirà anche di scaricare un file di testo, quindi mi piacerebbe davvero creare un "file di testo" binario.

Un'opzione migliore sarebbe uno strumento che richiederebbe un file di testo esadecimale e lo riverserebbe come binario. Non so se esiste una cosa del genere.

    
risposta data 15.10.2018 - 20:52
fonte

Leggi altre domande sui tag