PDA

View Full Version : [Generale] Quale principio per le patch binarie?


Y3PP4
26-09-2009, 00:29
Notte a tutti,

solitamente in ambiente open source parlando di patch potrebbe capitare di vedere dei file che verranno in seguito applicati con gli appositi strumenti sui sorgenti originali di un progetto (diff, patch, e compagnia bella). Questo mi è chiaro.

Ma nel caso di patch di programmi già distribuiti, oppure di programmi proprietari ove non si rilasciano i sorgenti, come è possibile rilasciare patch binarie? In quale modo il programma A, codificato per fare (banalmente) 1 più 1, può essere soggetto a patch? Per esempio, al di là degli aggiornamenti spesso vengono rilasciati degli eseguibili che patchano il programma installato -frequentissimo nei videogames, anche-

Quello che mi viene in mente e ricompilare proprio il programma e sostituire i binari installati nelle varie directories, ma spesso le patch si scaricano in pochissimi secondi, troppo poco per essere un eseguibile da sostituire...

Aspetto notizie da chi più informato.
Ciao ciao.

MadJackal
26-09-2009, 09:56
Credo (credo) che la modalità generale sia la medesima.
Solo che la patch viene fatta a livello binario e non testuale.

Invece di sostituire pezzi di codice in un sorgente sostituisci pezzi di codice binario.

WarDuck
26-09-2009, 18:10
La cosa più banale che mi viene in mente, nel caso in cui un eseguibile si appoggia a librerie esterne, è che appunto le funzioni siano collocate in quel file e dunque aggiornandolo con una nuova versione venga cambiato il comportamento del programma quando chiama quella funzione.

VICIUS
26-09-2009, 18:31
Qui (http://dev.chromium.org/developers/design-documents/software-updates-courgette) c'è un interessante articolo che spiega l'approccio usato per chrome. In sostanza l'eseguibile viene decompilato ed il diff viene fatto sui sorgenti ottenuti.

Y3PP4
27-09-2009, 14:51
Grazie mille a tutti e tre per la risposta :)
Mi scuso per il ritardo con cui rispondo ma non ho avuto modo di replicare prima.
Credo (credo) che la modalità generale sia la medesima.
Solo che la patch viene fatta a livello binario e non testuale.

Invece di sostituire pezzi di codice in un sorgente sostituisci pezzi di codice binario.
Uhm. In verità non ci avevo nemmeno pensato a questa ipotesi.
La cosa più banale che mi viene in mente, nel caso in cui un eseguibile si appoggia a librerie esterne, è che appunto le funzioni siano collocate in quel file e dunque aggiornandolo con una nuova versione venga cambiato il comportamento del programma quando chiama quella funzione.Metodo interessante! :D
Sarebbe una soluzione, secondo me, più che banale funzionale e semplice da realizzare... insomma brillante. Probabilmente useranno metodi migliori e più raffinati, ma secondo me questo è già un buon punto di partenza.
A questo punto non posso non pensare a una funzione che permette di gestire l'aggiornamento e che appunto tramite le librerie esterne -che vengono modificate dall'eseguibile di aggiornamento- sà cosa fare ogni volta e come operare. In questo modo si spiegherebbe anche il perchè di eseguibili sempre più ridotti, scaricando in un secondo momento le patch necessarie e "riconfezionando" il tutto come prima.

Qui (http://dev.chromium.org/developers/design-documents/software-updates-courgette) c'è un interessante articolo che spiega l'approccio usato per chrome. In sostanza l'eseguibile viene decompilato ed il diff viene fatto sui sorgenti ottenuti.
Grazie mille per la segnalazione :) Lo leggerò tutto d'un fiato -o magari due se è lungo-. Caspita però che soluzione... roba da Google! :O

Buona giornata a tutti.