Jak napisać skomplikowany patch?

Nawiązując do artykułu Jak napisać prosty patch? i komentarzy @ img (hi mate), prezentuję bardziej rozbudowaną wersję patchera z całą gamą sprawdzania potencjalnych błędów. Jeśli zauważycie więcej potencjalnych kłopotów – piszcie w komentarzach (sam jestem ciekaw, co jeszcze może pójść nie tak w jak się wydaje prostej operacji).

Źródła w języku angielskim zostały także opublikowane na https://github.com/PELock/Patch-File-Example

Komentarze (7)

antek

Wersji Windowsa sprawdzać nie trzeba, bo linkowanie sfc.dll powinno odfiltrować stare systemy ;).

Zastanawiam się tylko nad błędem przy ‘return 9’ — gdy on wystąpi, plik prawdopodobnie będzie uszkodzony, ponieważ zapisał się niepełny patch (jakimś cudem). Może trzeba dodać też robienie kopii zapasowej i przywracanie jej, gdy patch się nie powiedzie? To z kolei sugeruje użycie trochę innego rozwiązania — przed patchem należy zrobić kopię pliku, patchować kopię, a gdy wszystko jest OK, można swapnąć oryginał z kopią (MoveFile, ReplaceFile). Wtedy jest i robienie backupu, i program nadal działa, gdy patchowanie się nie powiedzie. Nie trzeba też używać transakcyjnego api i patch nagle działa w sposób atomowy, nawet jeśli ma dużo rzeczy do zmiany 😉

Odpowiedz
bartek

@antek: to z kolei rodzi pytania o to, czy i gdzie można wykonać kopię zapasową, do %temp%, no i czy jest odpowiednia ilość wolnego miejsca na dysku, oprócz tego przychodzi mi jeszcze do głowy pobieranie i przywracanie poprawnych dat modyfikacji oryginalnego pliku, usuwanie atrybutu read only i jego przywracanie w razie potrzeby 🙂

Odpowiedz
bartek

@Adam B. patche stosuje się NIE TYLKO jako cracki, ale wszędzie tam, gdzie zachodzi potrzebna ingerencji w binarkę. Których instrukcji nie rozumiesz?

Odpowiedz

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *