Icon Ressource

[C] ffind - Finde Bytesequenzen in Binärdateien 1.1

Wer schon einmal in die Verlegenheit gekommen ist, Binärdateien patchen zu müssen, wird vermutlich einen HEX Editor zu Hilfe genommen haben um Bytesequenzen zu finden und zu überschreiben. C unterstützt das Überschreiben von Sequenzen direkt im Stream, sodass es insbesondere bei großen Dateien nicht nötig ist, den gesamten Dateiinhalt zu lesen und in einen Cache zu schreiben.

Die hier implementierte ffind Funktion liest lediglich Teile der Datei und nutzt den Rabin-Karp Suchalgorithmus um die "Nadel im Heuhaufen" zu finden. Bei Erfolg wird der Streamcursor vor die gefundene Sequenz gestellt.

Es ist sowohl möglich den Dateiname zu übergeben, als auch einen bereits geöffneten FILE Stream. Im letzteren Fall beginnt die Suche bei der derzeitigen Position des Streamcursors, was ein Weitersuchen derselben oder einer anderen Sequenz in der Datei ermöglicht.

Speziell für Windows gibt es zusätzlich die ffindw Funktion. Einziger Unterschied ist, dass der Dateiname als String von wchar_t übergeben wird, um auch auf Windows Betriebssystemen nicht-ASCII Dateinamen zu unterstützen.

Im Download-Paket finden sich die beiden Dateien findinfile.h und findinfile.c mit den beiden Funktionen:
FILE *ffind(const char *file_name, FILE *file_stream, const void *needle, long needle_cnt);
FILE *ffindw(const wchar_t *file_name, FILE *file_stream, const void *needle, long needle_cnt); (nur Windows)

Eine detaillierte Funktionsbeschreibung ist im Header. In der ebenfalls im Paket enthaltenen main.c sind Testfunktionen die auch als Beispiele für die Nutzung herangezogen werden können.
Autor
german
Downloads
114
Aufrufe
457
Erstellt am
Letzte Bearbeitung
Bewertung
5,00 Stern(e) 1 Bewertung(en)

Weitere Ressourcen von german

Letzte Aktualisierungen

  1. Redundanter Code entfernt

    Der überwiegende Teil von ffind und ffindw war exakt derselbe Code. Das schrie geradezu danach...
Oben Unten