CV #52het - 52 projekt

Diff - fájlösszehasonlító

- 2001 -

Szoftverfejlesztők között gyakori használati tárgy a "diff", mint "difference" azaz különbség. Van erre egyébként egy jól bevált eszköz, pont ez a neve is, de én 2001-ben még nem igazán voltam jó ismertségben ezekkel. A légyege az, hogy összehasonlít két szöveges fájlt (mondjuk txt dokumentumot, forráskódot, stb) és megjelöli, hogy hol különbözik. Bináris fájlokkal (pl. programok, tömörített fájlok, amik nem igazán olvashatók emberi szemmel) viszont gondban volt: csak annyit írt ki, hogy különbözik-e vagy sem.

Nekem pedig pont az utóbbira volt szükségem, hogy például analizáljam a crackelő programok működését, nevezetesen: mit is csinálnak a folyamat alatt az eredeti fájllal. Vagy esetleg, hogy ha a játékban, amit játszok, 2 pénzegységgel növekszik a vagyonom, az pontosan hol van a mentésben (mentés előtte, mentés utána, diff).

Neki is láttam megalkotni egy bináris diff programot a legjobb tudásom és az általam legtöbbször használt programozási eszközzel, a Delphivel.

Így működött:

Használat: diff.exe file1.kit file2.kit [/kapcsolók ... ]
  /Dxxx           Csak azokat a különbségeket írd ki, amelyek
                  különbsége xxx (decimális szám)
  /Fxxxx-yyyy     A fájlt csak xxxx-től yyyy-ig nézi meg
  /E[xx;yy;aa]    Kihagyja azokaz a számokat a keresésből, amelyek a [] között
                  vannak, és pontosvesszővel vannak elválasztva
  /B              Biteltérés, ha a két különbség csak egy bitben tér el
  /H              Részletesebb segítség
  /G              Generáljon kódot:
     /Gp          Pascal nyelven
     /Gd          Delphi nyelven
     /Ga          Assembly nyelven (készülőben)
     /Gc          C/C++ nyelven
  /X              Példák
  /C              A két fájlból egy részletet kiír, +5 -5 bájtos körzetben
  /A              A különbségeket ASCII karakterként írja ki

Képes volt a különbségekből olyan kódot generálni, amit pl. Delphivel le lehetett fordítani, azaz egy adott crack-et megszabadítani a fölösleges sallangtól (az alkotó által összerakott zenélő-villogó, működéshez alapvetően szükségtelen keret).

Példa:
  diff.exe file1.ext file2.ext /D1
    Ez a példa összehasonlítja a file1.ext és file2.ext fájlokat, és
    csak azokat a különbségeket írja ki, mint a 01 & 02 vagy 57 & 56 
  diff.exe file1.ext file2.ext /F1-500
    Ez a példa összehasonlítja a file1.ext és file2.ext fájlokat az
    elsőtől az ötszázadik bájtig
  diff.exe file1.ext file2.ext /E[1;31;255]
    Ez a példa összehasonlítja a file1.ext és file2.ext fájlokat, de
    ha a különbségek közül bármelyik 1 vagy 31 vagy 255 akkor azokat
    nem írja ki
Részletes segítség:
  o Ez a program tulajdonképpen két fájlt, bájtonként összehasonlít.
    Az összehasonlítás procedúrája:
    A két fájl megnyitása után mindkettőt beolvassa És bájtról 
    bájtra végignézi, hogy melyik pár különbözik. Ezt pedig kiírja.
  o A program az érvénytelen kapcsolókat (többnyire amelyek nincsenek a
    programban) figyelmen kívül hagyja
  o A program max 4GB nagyságú fájlt tud kezelni "csak"
  o A generált kód az első paraméterben megadott fájlra csinál egy
    programot, ami a második fájltól való különbségeket írja felül,
    Tehát ha a generált kódot lefordítva lefuttatod, akkor az első
    fájl utána egyezni fog a másodikkal.

Tippek, trükkök:
  o Ha a /F kapcsolót úgy használjuk, hogy nem adunk meg végértéket, akkor
    automatikusan a fájl vége lesz az.

Forráskódot erre tessék.