Newsgroup: it.comp.programmare
Titolo: Creare patches

Ciao a tutti!
Ho un quesito sul quale vorrei il vostro parere.
Poniamo il caso io desideri sviluppare un sistema di patch per un software
di mia produzione. Poniamo poi il caso che, nel caso voglia far uscire
versioni nuove, non intenda farlo distribuendo il nuovo eseguibile
aggiornato (cosa che ho fatto fino ad ora, visto che i miei programmi non
arrivavamo mai a dimensioni "scomode" da scaricare).
L'idea era creare un programma che applicasse una "patch" (ovviamente
contenuta nel programma stesso) al/ai file(s) del mio software iniziale;
anche perchč talvolta la modifica č una piccola percentuale del totale dei
files da, eventualmente, ridistribuire.
Il punto č: come farlo? Scrivo in Hex nell'eseguibile e modifico stringa
(esadecimale) per stringa? Ma se le modifiche portano ad un "allungamento"
del file? Secondo vuoi, le update di Norton, o di altri software famosi che
si appoggiano alle patch per aggiornare il loro SW, che criterio seguono?
Ciao!!
larss
--
0110110001100001011100100111001101
1100110111001100110011001100010100
0000011010000110111101110100011011
0101100001011010010110110000101110
011000110110111101101101

 si appoggiano alle patch per aggiornare il loro SW, che criterio seguono?
Umh, dovresti chiederlo alla Micro$oft, loro sono esperti in patch per bugs
:)
Ciao
--
Noixe

 files da, eventualmente, ridistribuire.
Cerca nei siti hacker, ci sono programmi che creano patch (sotto forma 
di programmini) a partire da due versioni diverse dello stesso .exe: un 
programma-patch non č piů grande di pochi Kb.

 Il punto è: come farlo? Scrivo in Hex nell'eseguibile e modifico stringa
Il tutto si basa sull'algoritmo della LCS (longest common subsequences)
Devi vedere i due file come due stringhe binarie e trovare la più lunga
sottosequenza comune.
Una volta trovata avrai anche la serie di modifiche da fare per passare da
un file all'altro e viceversa.
Prova a guardare su 
www.torry.ru
, dovresti trovare il componente TAjdiff.
All'interno dello zip, oltre al componente e ai sorgenti trovi un mini
tutorial
sull'algoritmo per fare i confrontri tra file, trovi anche due applicazioni
già fatte,
una per fare il confronto tra file di testo e un pathcbuilder per fare patch
di file binari.
Io ho guardato solo il programma per fare i confronti tra file, sembrava
funzionare però
il codice era scritto alla puttanesca, aveva tutta l'aria del porting
brutale di un sorgente
c in delphi. Se devi metterci mano, ti conviene guardare come funziona e
riscrivere tutto da capo.
Bye

 arrivavamo mai a dimensioni "scomode" da scaricare).
la domanda è interessante. Non mi sono messo a lavorare sull'algoritmo
perchè probabilmente non ce ne è bisogno: se scrivi per Linux, all'interno
del sistema operativo esiste già un applicativo adatto allo scopo.
Riporto due estratti della "Linux Facile 2.1", che nonostante il nome è una
guida fatta bene (bella grossa, però)
-------------------------------------
10.2.17 diff
Questo comando serve per analizzare due file e riportare le differenze:
[darshan@dada darshan]$ diff -urN it.po it.po.new
Dopo aver digitato il comando vedrete a video le differenze tra i due file.
Il comando diff
viene utilizzato per la creazione di patch con le seguenti opzioni:
[darshan@dada darshan]$ diff -urN it.po it.po.new > patch
Per creare una patch su file binari è necessario digitare quanto segue:
[darshan@dada darshan]$ diff -a --binary bin bin.2 > patch
--------------------------------------
--------------------------------------
10.2.61 patch
Il comando serve per applicare i file patch
(creato con il comando diff) con le differenze
tra un file e un file più recente. La modalità di utilizzo è la seguente:
[darshan@dada darshan]$ patch -p0 < patch
Per applicare patch binarie è necessaria la seguente opzione:
[darshan@dada darshan]$ patch --binary -p0 < patch
--------------------------------------
Non so se qualche anima buona ne abbia fatto un porting su Win32, ma la cosa
mi sembra più che possibile. In ogni caso, di quel comando si trovano di
sicuro le sorgenti, essendo una parte di GNU... quindi se lavori per Windows
te le puoi studiare senza alcun problema, ed eventualmente farti il port
(parla uno che non si metterebbe a farlo, intendiamoci).
Così per curiosità, di che genere di programmi ti occupi?