Le patch software modificano mai un file esistente o sostituiscono il tutto?

5

Immagina un moderno gioco per PC, per esempio. Sto usando questo esempio perché in genere il file eseguibile è abbastanza grande, e specialmente nei giochi moderni i file di risorse sono anche piuttosto grandi.

L'applicazione di patch a un file di risorse è abbastanza semplice perché, a seconda del formato del file, potrebbe essere semplicemente il caso di sostituire una risorsa memorizzata contigua con un'altra. Ma cosa succede se si desidera modificare una riga di codice in un eseguibile ingombrante?

Quando il codice è compilato, è ottimizzato e riorganizzato per consentire strutture non presenti nei linguaggi di livello inferiore, e quindi in genere il file di codice risultante è molto raramente una traduzione riga per riga del codice di alto livello. Quindi, tenendo presente questo, se volessi cambiare una linea specifica per correggere un bug, l'aggiornamento avrebbe quindi una nuova versione dell'intero eseguibile, o potrebbe funzionare come una specie di tecnica di individuazione delle differenze come un sistema di controllo del codice sorgente? / p>     

posta leylandski 12.10.2015 - 11:20
fonte

2 risposte

11

Sì e no, entrambi i meccanismi funzionano.

Il modo più semplice per correggere un prodotto è sostituendo un componente (ad esempio una dll) con una nuova versione di esso. Questo di solito richiede l'interruzione del programma, quindi è utile per un gioco o un altro programma che viene eseguito occasionalmente ma non così buono per i componenti del sistema operativo.

Quindi sono state sviluppate varie tecniche per applicare direttamente patch a un eseguibile (o dll) in esecuzione. Microsoft lo fa creando tutte le DLL con uno spazio prima di ogni funzione in modo che possa essere sovrascritta da una patch "salta in una nuova posizione", la nuova funzione può essere spedita e la posizione cambiata così tutti i programmi in esecuzione inizieranno a usare il nuovo codice una volta patchato. ( Dettagli tecnici qui ) Ciò si verifica in fase di esecuzione, quindi l'arresto il programma patchato richiederà la riapplicazione della patch (questo si verifica automaticamente o il componente viene aggiornato una volta che il programma è stato arrestato - cioè su un riavvio la nuova dll sostituisce la vecchia in modo che la patch di runtime non sia più necessaria). p>     

risposta data 12.10.2015 - 12:03
fonte
3

Quando l'eseguibile viene modificato, è spesso più facile sostituire l'intero eseguibile, piuttosto che modificarlo. Ciò rende possibile eseguire il patch dell'eseguibile indipendentemente dalla versione in cui si trova (diversamente dai patcher delle differenze binarie). La stragrande maggioranza dei giochi moderni lo fa in questo modo.

Nei giochi moderni, la dimensione dell'eseguibile scompare in confronto ai file di risorse, quindi c'è poco da guadagnare modificando l'eseguibile.

    
risposta data 12.10.2015 - 13:56
fonte

Leggi altre domande sui tag