libgoblin


Dokumentation
https://docs.rs/goblin/
changelog
Verwendung
Goblin benötigt rustc 1.85.0 (Rust 2024 Edition).
Füge dies zu deiner Cargo.toml hinzu
[dependencies]
goblin = "0.10"
Funktionen
- großartiger Crate-Name
- Zero-Copy, plattformunabhängige, endianness-bewusste ELF64/32-Implementierung – wow!
- Zero-Copy, plattformunabhängiger, endianness-bewusster 32/64-Bit-Mach-o-Parser – zoiks!
- PE 32/64-Bit-Parser – bing!
- Ein Unix- und BSD-Archiv-Parser (letzterer mit freundlicher Genehmigung von [@willglynn]) – huzzah!
- Viele cfg-Optionen – sie lassen dich den Kopf schütteln und machen dich wütend, wenn du den Quellcode liest!
- Gefuzzt – „I am happy to report that goblin withstood 100 million fuzzing runs, 1 million runs each for seed 1~100.“ – [@sanxiyn]
- Tests
libgoblin soll Ihre All-in-One-Lösung für das Parsen, Laden und Analysieren von Binärdateien sein.
Anwendungsfälle
Goblin unterstützt hauptsächlich die folgenden wichtigen Anwendungsfälle:
-
Core, std-freie #[repr(C)]-Strukturen, kurze Kompilierzeit, 32/64 (oder beides) nach Belieben.
-
Type Punning. Definiere eine Funktion einmal für einen Typ, aber lasse sie auf 32- oder 64-Bit-Varianten funktionieren – ohne wirklich etwas zu ändern, und keine Makros! Siehe examples/automagic.rs für ein einfaches Beispiel.
-
std-Modus. Dieser fügt Lese- und Schreibimplementierungen über Pread und Pwrite hinzu, Lesen von Datei, praktische Allokationen, zusätzliche Methoden usw. Dies ist für Benutzer, die allozieren können und Binärdateien von der Festplatte lesen möchten.
-
Endian_fd. Ein wirklich schrecklicher Name 😆 dies ist für die Binäranalyse wie in panopticon oder falcon, die Binärdateien mit fremder Endianness lesen müssen, oder als Grundlage für die Erstellung plattformübergreifender Binutils für fremde Architekturen, z. B. cargo-sym und bingrep sind einfache Beispiele, aber der Himmel ist die Grenze.
Hier sind einige Dinge, die Sie mit dieser Crate tun könnten (oder die Sie bei der Implementierung helfen könnten, damit sie möglich werden):
- Schreiben Sie einen Compiler und verwenden Sie ihn, um Binärdateien zu erzeugen (alle rohen C-Strukturen leiten
Pwrite ab).
- Schreiben Sie ein Binäranalysewerkzeug, das verschiedene Binärformate lädt, parst und analysiert, z. B. panopticon oder falcon.
- Schreiben Sie einen halbwegs funktionierenden dynamischen Linker.
- Schreiben Sie einen Kernel und laden Sie Binärdateien mit
no_std-cfg. D.h., es sind im Wesentlichen nur Struct- und Const-Definitionen (wie ein C-Header) – kein fd, keine Ausgabe, kein std.
- Schreiben Sie ein bin2json-Werkzeug, denn warum sollten Binärformate nicht in JSON sein?
Konfigurationsoptionen (Cfgs)
libgoblin ist als massiv konfigurierbar ausgelegt. Die aktuellen Flags sind:
- elf64 - 64-Bit-ELF-Binärdateien,
repr(C)-Strukturdefinitionen
- elf32 - 32-Bit-ELF-Binärdateien,
repr(C)-Strukturdefinitionen
- mach64 - 64-Bit-Mach-o-
repr(C)-Strukturdefinitionen
- mach32 - 32-Bit-Mach-o-
repr(C)-Strukturdefinitionen
- pe32 - 32-Bit-PE-
repr(C)-Strukturdefinitionen
- pe64 - 64-Bit-PE-
repr(C)-Strukturdefinitionen
- te - Terse Executable (TE)
repr(C)-Strukturdefinitionen
- archive - ein Unix-Archiv-Parser
- endian_fd - parst entsprechend der Endianness in der Binärdatei
- std - um
no_std-Umgebungen zu erlauben
Betreuer
- PE: [@kkent030315]
- Elf: [@m4b], Bewerbungen offen
- Mach-o: [@m4b], Bewerbungen offen
Betreuer sind die ersten Ansprechpartner für Rezensionen für das jeweilige Backend. Sie werden basierend auf früheren Beiträgen, Aktivität, Grundwissen sowie freundlichem und geselligem Verhalten ausgewählt :D
Derzeit habe nur ich ([@m4b]) Merge-Rechte für alle PRs. In Zukunft ist es wahrscheinlich, dass der/die Betreuer dieses Backends ebenfalls Merge-Rechte erhalten.
Schließlich werde ich wahrscheinlich immer noch kurze Überprüfungen aller PRs durchführen, werde mich aber größtenteils/ganz auf den Betreuer dieses Backends verlassen.
Und denkt immer an die Weisheit von Bill und Ted: „Be excellent to each other!“
Mitwirkende
Danke euch allen ❤️ !
In lexikografischer Reihenfolge:
- [@000lbh]
- [@2vg]
- [@5225225]
- [@alessandrod]
- [@amanieu]
- [@anfedotoff]
- [@apalm]
- [@baloo]
- [@BinFlip]
- [@burjui]
- [@CalebFenton]
- [@chf0x]
- [@connorkuehl]
- [@dancrossnyc]
- [@DreydenGys]
- [@dureuill]
- [@Evian-Zhang]
- [@ExPixel]
- [@flanfly]
- [@glandium]
- [@glslang]
- [@Gelbpunkt]
- [@gunbux]
- [@h33p]
- [@hannahfluch]
- [@Hexorg]
- [@ibabushkin]
- [@ideeockus]
- [@ivlzme]
- [@jackcmay]
- [@jan-auer]
- [@Javagedes]
- [@jessehui]
- [@jdub]
- [@Jhynjhiruu]
- [@johannst]
- [@JohnScience]
- [@joschock]
- [@jrmuizel]
- [@jsgf]
- [@Jvlegod]
- [@keith]
- [@kjempelodott]
- [@kkent030315]
- [@ko1n]
- [@le-jzr]
- [@Lichtso]
- [@lion128]
- [@lissyx]
- [@llogiq]
- [@lumag]
- [@lzutao]
- [@lzybkr]
- [@m-hilgendorf]
- [@makubacki]
- [@mmaekr]
- [@m4b]
- [@messense]
- [@mitsuhiko]
- [@mkroening]
- [@mre]
- [@Mrmaxmeier]
- [n01e0]
- [nathaniel-daniel]
- [@nick96]
- [@nico-abram]
- [@npmccallum]
- [@pchickey]
- [@philipc]
- [@PJB3005]
- [@prettyroseslover]
- [@Pzixel]
- [@quake]
- [@raindev]
- [@RaitoBezarius]
- [@ReturnRei]
- [@rocallahan]
- [@sanxiyn]
- [@SAY-5]
- [@skdltmxn]
- [@sollyucko]
- [@supervacuus]
- [@Swatinem]
- [@SweetVishnya]
- [@SquareMan]
- [@tathanhdinh]
- [@Techno-coder]
- [@tiann]
- [@ticki]
- [@Timmmm]
- [@Tiwalun]
- [@track-5]
- [@tux3]
- [@wickerwacka]
- [@willglynn]
- [@woodruffw]
- [@wyxloading]
- [@xcoldhandsx]
- [@x0rb3l]
- [@x64k]