
Un crate di analisi binaria birichino e multipiattaforma, scritto in Rust.

Goblin richiede rustc 1.85.0 (edizione Rust 2024).
Aggiungi al tuo Cargo.toml
[dependencies]
goblin = "0.10"
libgoblin mira a essere il tuo sportello unico per parsing, caricamento e analisi di binari.
Goblin supporta principalmente i seguenti casi d'uso importanti:
Strutture #[repr(C)] core, senza std, tempo di compilazione ridotto, 32/64 (o entrambi) a tuo piacimento.
Type punning. Definisci una funzione una volta su un tipo, ma falla funzionare su varianti a 32 o 64 bit - senza cambiare nulla, e niente macro! Vedi examples/automagic.rs per un esempio base.
Modalità std. Aggiunge implementazioni di lettura e scrittura tramite Pread e Pwrite, lettura da file, allocazioni di comodo, metodi extra, ecc. Questo è per client che possono allocare e vogliono leggere binari dal disco.
Endian_fd. Un nome davvero terribile 😆 questo è per analisi binaria come in panopticon o falcon che necessitano di leggere binari con endianness diversa, oppure come base per costruire binutils cross-platform per architetture straniere, ad es. cargo-sym e bingrep sono semplici esempi di questo, ma il cielo è il limite.
Ecco alcune cose che potresti fare con questo crate (o aiutare a implementare in modo che possano essere realizzate):
Pwrite derivato).no_std. Cioè, è essenzialmente solo definizioni di struct e const (come un header C) - nessun fd, nessun output, nessun std.libgoblin è progettato per essere massicciamente configurabile. Le flag attuali sono:
repr(C)repr(C)repr(C) per mach-o a 64 bitrepr(C) per mach-o a 32 bitrepr(C) per PE a 32 bitrepr(C) per PE a 64 bitrepr(C) per Terse Executable (TE)no_stdI manutentori sono i revisori di primo contatto per quel particolare backend. Vengono scelti in base ai contributi precedenti, all'attività, alla conoscenza di base e al comportamento amichevole e socievole :D
Attualmente, io (@m4b) ho solo diritti di merge per tutte le PR. In futuro è probabile che anche i manutentori di quel determinato backend avranno diritti di merge.
Infine, probabilmente darò comunque revisioni sommarie a tutte le PR, ma mi affiderò principalmente/in toto al manutentore per quel backend.
E ricorda sempre la saggezza di Bill e Ted: "Siate eccellenti gli uni con gli altri!"
Grazie a tutti ❤️ !
In ordine lessicografico:
Salvo diversa indicazione esplicita, accetti che i tuoi contributi siano concessi in licenza come descritto nel file LICENSE allegato (MIT).