NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1049 most downloaded on crates.io
An impish, cross-platform, ELF, Mach-o, and PE binary parsing and loading crate
Last release 4 months ago
28 May 2026
Ships fairly regularly
a new release about every 3 months
Most releases are documented
notes for 50 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
10 years old
66 releases · first in 2016
Nothing published for this version
build: bump version to 0.10.6
build: bump version to 0.10.6
Nothing published for this version
One column per quarter.
Nothing published for this version
Nothing published for this version
build: bump version to 0.10.2
build: bump version to 0.10.2
build: bump version to 0.10.1; add Kento to authors line
build: bump version to 0.10.1; add Kento to authors line
build: cargo fmt for 2024 edition
build: cargo fmt for 2024 edition
build: use rust 2024 edition; bump MSRV to 1.85 pe: fix address size incompatibility on 32-bit builds, thanks @kkent030315: https://github.com/m4b/goblin/pull/441 pe: fix fail on malformed certificate table parsing, thanks @ideeockus: https://github.com/m4b/goblin/pull/417 pe: remove use of generics for is_32bit, thanks @kkent030315: https://github.com/m4b/goblin/pull/435 pe: Support multiple debug directories and VCFeature, Repro, ExDllCharacteristics, POGO parsers, thanks @kkent030315: https://github.com/m4b/goblin/pull/403
elf: add Loongarch macros and name mapping, thanks @000lbh: https://github.com/m4b/goblin/pull/446 pe: Add base relocation parser thanks @kkent030315: https://github.com/m4b/goblin/pull/444
pe.header: fix parse without rich header, thanks @ideeockus: https://github.com/m4b/goblin/pull/451
pe.header: fix parse header with no dos stub, thanks @ideeockus: https://github.com/m4b/goblin/pull/456
pe.imports: ignore malformed imports in ParseMode::Permissive, thanks @ideeockus: https://github.com/m4b/goblin/pull/442
pe: Change Section Table Real Name Handling, thanks @prettyroseslover: https://github.com/m4b/goblin/pull/438
pe.tls: tlsdata.parse_with_opts - integer overflow + out of bound, thanks @BinFlip: https://github.com/m4b/goblin/pull/448
pe.debug: POGOInfo.parse_with_opts - integer overflow + out of bound, thanks @BinFlip: https://github.com/m4b/goblin/pull/449
archive: fix subtract with overflow in archive parser, thanks @kkent030315: https://github.com/m4b/goblin/pull/454
te: fix subtract with overflow in TE header parser, thanks @kkent030315: https://github.com/m4b/goblin/pull/452
archive: fix size overflow in name index parser, thanks @kkent030315: https://github.com/m4b/goblin/pull/455
coff: fix subtract with overflow in COFF header parser, thanks @kkent030315: https://github.com/m4b/goblin/pull/453
build: bump version to 0.9.3
build: bump version to 0.9.3
pe: fix import parser for non-well-formed import table, thanks @kkent030315: https://github.com/m4b/goblin/pull/429 pe: fix empty import table parsing, thanks @kkent030315: https://github.com/m4b/goblin/pull/430
pe: Add tests for TLS parser and characteristics constants, thanks @kkent030315: https://github.com/m4b/goblin/pull/426 elf: added new constants for 32-bit PowerPC, thanks @ivlzme https://github.com/m4b/goblin/pull/439
pe: fix PE with zero raw_data_size of section, thanks @ideeockus: https://github.com/m4b/goblin/pull/396
pe: fix PE with zero raw_data_size of section, thanks @ideeockus: https://github.com/m4b/goblin/pull/396
pe: allow parsing pe::Header without dos stubs, Header::parse_without_dos, thanks @ideeockus: https://github.com/m4b/goblin/pull/396
pe: fix parsing of tls in certain cases (issue: https://github.com/m4b/goblin/issues/424), thanks @kkent030315: https://github.com/m4b/goblin/pull/425
pe: fix parsing of tls in certain cases (issue: https://github.com/m4b/goblin/issues/424), thanks @kkent030315: https://github.com/m4b/goblin/pull/425
pe: add TE (terse executable) support, big thanks @Javagedes: https://github.com/m4b/goblin/pull/397 pe: add support for codeview PDB 2.0, thanks @jos
pe: add TE (terse executable) support, big thanks @Javagedes: https://github.com/m4b/goblin/pull/397 pe: add support for codeview PDB 2.0, thanks @joschock: https://github.com/m4b/goblin/pull/409 pe: parse TLS in data directories, thanks @kkent030315: https://github.com/m4b/goblin/pull/404
Everything in 0.8.1 except TE support in https://github.com/m4b/goblin/pull/397 was reverted, due to it being technically a breaking change. 0.8.1 was…
Everything in 0.8.1 except TE support in https://github.com/m4b/goblin/pull/397 was reverted, due to it being technically a breaking change. 0.8.1 was yanked from crates.
build: remove te from keywords can not publish with > 5 keywords per …
build: remove te from keywords can not publish with > 5 keywords per …
pe: document pe header, thanks @JohnScience: https://github.com/m4b/goblin/pull/399 pe, elf: fix doc warnings, thanks @5225225: https://github.com/m4b/goblin/pull/395 pe: document dos header, thanks @JohnScience: https://github.com/m4b/goblin/pull/393
pe: add TE (terse executable) support, big thanks @Javagedes: https://github.com/m4b/goblin/pull/397 elf: allow parsing section headers from raw bytes, thanks @lissyx: https://github.com/m4b/goblin/pull/391 mach: add support for lossy parsing, thanks @h33p: https://github.com/m4b/goblin/pull/386 elf: add convenience functions, thanks @tiann : https://github.com/m4b/goblin/pull/387
pe: read reserved dos headers, thanks @kkent030315: https://github.com/m4b/goblin/pull/405
build: release 0.8.0, MSRV=1.63, update changelog, add 3 new contribu…
build: release 0.8.0, MSRV=1.63, update changelog, add 3 new contribu…
msrv: bumped to 1.63.0 since scroll bumped as well pe: new field added to parse options: https://github.com/m4b/goblin/pull/377 pe: attribute certs now non-exhaustive: https://github.com/m4b/goblin/pull/378 goblin: hint and object enum is now non-exhaustive pe: write support introduced some breaking changes, e.g., data directories array adds a tuple of usize and data directory, DosHeader has all the fields filled out, Header struct has a dos_stub field added, symbols and strings fields is made optional in Coff struct, see: https://github.com/m4b/goblin/pull/361
elf: fix documentation, thanks @crzysdrs: https://github.com/m4b/goblin/pull/374 pe: attribute certificates non-exhaustive, thanks @RaitoBezarius: https://github.com/m4b/goblin/pull/378 pe: fix authenticode parsing, thanks @baloo: https://github.com/m4b/goblin/pull/383
strtab: len method added to return number of bytes of the strtab pe: absolutely epic pe write support PR, thanks @RaitoBezarius and @Baloo: https://github.com/m4b/goblin/pull/361 pe: add coff object file support, thanks @vadimcn, https://github.com/m4b/goblin/pull/379 pe: allow toggling parsing of attribute certs, thanks @suttonbradley: https://github.com/m4b/goblin/pull/377 mach: add new mach-o constants, thanks @keith: https://github.com/m4b/goblin/pull/372
build: bump version to 0.7.1 due to msrv log failure, bumping our msr…
build: bump version to 0.7.1 due to msrv log failure, bumping our msr…
mach: Implement LC_NOTE, (breakage=load commands are marked non-exhaustive), thanks @messense: https://github.com/m4b/goblin/pull/342
mach: Implement LC_NOTE, (breakage=load commands are marked non-exhaustive), thanks @messense: https://github.com/m4b/goblin/pull/342
elf: fix is_lib detection, thanks @m-hilgendorf: https://github.com/m4b/goblin/pull/366 pe: fix out of bounds access while parsing AttributeCertificate, thanks @anfedotoff: https://github.com/m4b/goblin/pull/368
pe: support basic certificates enumeration, thanks @RaitoBezarius: https://github.com/m4b/goblin/pull/354
pe: fix certificate tables parsing, thanks @baloo: https://github.com/m4b/goblin/pull/359
pe: add pe authenticode support, thanks @baloo: https://github.com/m4b/goblin/pull/362
mach: implement LC_FILESET_ENTRY, thanks @mmaekr: https://github.com/m4b/goblin/pull/369
build: add afl fuzzing support, thanks @anfedotoff: https://github.com/m4b/goblin/pull/351
elf.section_header: additional workaround for 0-length sections, thanks @Jhynjhiruu: https://github.com/m4b/goblin/pull/347 pe.utils: file alignment c
elf.section_header: additional workaround for 0-length sections, thanks @Jhynjhiruu: https://github.com/m4b/goblin/pull/347 pe.utils: file alignment check, thanks @anfedotoff: https://github.com/m4b/goblin/pull/340
elf: Add basic GNU PROPERTY note support, thanks @x64k: https://github.com/m4b/goblin/pull/352
mach: Implement LC_BUILD_VERSION, thanks @messense: https://github.com/m4b/goblin/pull/341
macho: add support for archives in multi-arch binaries, big thanks to @nick96: https://github.com/m4b/goblin/pull/322
macho: add support for archives in multi-arch binaries, big thanks to @nick96: https://github.com/m4b/goblin/pull/322
elf: only consider loadable segments for VM translation (this may semantically break someone, if they depended on older behavior), thanks @lumag: https://github.com/m4b/goblin/pull/329
archive: fix potential panic in bsd filenames, thanks @nathaniel-daniel: https://github.com/m4b/goblin/pull/335 archive: fix subtract with overflow, thanks @anfedotoff: https://github.com/m4b/goblin/pull/333 pe: fix oob access, thanks @anfedetoff: https://github.com/m4b/goblin/pull/330 archive: fix oob access, thanks @anfedetoff: https://github.com/m4b/goblin/pull/329
pe: add machine_to_str utility function, thanks @cgzones: https://github.com/m4b/goblin/pull/338 fuzz: add debug info for line numbers, thanks @SweetVishnya: https://github.com/m4b/goblin/pull/336
pe: fix regression in PE binary parsing, thanks @SquareMan: https://github.com/m4b/goblin/pull/321
pe: fix regression in PE binary parsing, thanks @SquareMan: https://github.com/m4b/goblin/pull/321
elf: fix elf strtab parsing, thanks @tux3: https://github.com/m4b/goblin/pull/316
elf: fix elf strtab parsing, thanks @tux3: https://github.com/m4b/goblin/pull/316
elf: implement plain for note headers, thanks @mkroening: https://github.com/m4b/goblin/pull/317
elf: fix arithmetic overflows in file_range() and vm_range(), thanks @alessandron: https://github.com/m4b/goblin/pull/306 pe: fix string table contain
elf: fix arithmetic overflows in file_range() and vm_range(), thanks @alessandron: https://github.com/m4b/goblin/pull/306
pe: fix string table containing empty strings, thanks @track-5: https://github.com/m4b/goblin/pull/310
pe: remove check on debug directory size, thanks @lzybkr: https://github.com/m4b/goblin/pull/313
elf: expose more of programheader impl regardless of alloc feature flag, thanks @dancrossnyc: https://github.com/m4b/goblin/pull/308 mach.parse: Handle DyldExportsTrie, thanks @apalm: https://github.com/m4b/goblin/pull/303
goblin: guard all capacity allocations with bounds checks, this is breaking because we introduced a new error enum, which is now marked as non_exhaust
goblin: guard all capacity allocations with bounds checks, this is breaking because we introduced a new error enum, which is now marked as non_exhaustive, thanks @Swatinem: https://github.com/m4b/goblin/pull/298 pe: support exports without an offset, thanks @dureuill: https://github.com/m4b/goblin/pull/293
mach: fix overflow panics, thanks @Swatinem: https://github.com/m4b/goblin/pull/302
pe: add signature header check, thanks @skdltmxn: https://github.com/m4b/goblin/pull/286
elf: improve parsing SHT_SYMTAB complexity from O(N^2) to O(N), thanks @Lichsto: https://github.com/m4b/goblin/pull/297
elf: clarify documentation on strtab behavior better, and add nice doc example, thanks @n01e0: https://github.com/m4b/goblin/pull/301 elf: add rpaths and runpath to elf, thanks @messense: https://github.com/m4b/goblin/pull/294 elf: complete elf OSABI constants, thanks @messense: https://github.com/m4b/goblin/pull/295 elf: fill out more elf constants, thanks @n01e0: https://github.com/m4b/goblin/pull/296
YANKED, see 0.5.1
YANKED, see 0.5.1
elf: add initial versioned symbols support, thanks @johannst: https://github.com/m4b/goblin/pull/280
PF_MASKOS and PF_MASKPROC, thanks @npmccallum: https://github.com/m4b/goblin/pull/281strtab: preparses the string table to prevent certain class of DoS attacks, thanks @Lichtsto: https://github.com/m4b/goblin/pull/275
elf: fix error when alloc, but not endian, thanks @dancrossnyc: https://github.com/m4b/goblin/pull/273
elf: fix returning invalid ranges for SH_NOBIT sections, method changed to return optional range instead, thanks @Tiwalun: https://github.com/m4b/gobl
pe: pass parse opts correctly in pe parser in lookup table, fixes some issues loading and parsing pe libraries: https://github.com/m4b/goblin/pull/268 elf: remove unnecessary unsafe blocks, thanks @nico-abram: https://github.com/m4b/goblin/pull/261 elf: replace pub type with pub use, thanks @sollyucko: https://github.com/m4b/goblin/pull/259
elf: add a lazy parse example, thanks @jesseui: https://github.com/m4b/goblin/pull/258 elf: add a new fuzzing harness + fix overflows in hash functions and note data iterator construction, thanks @Mrmaxmeier: https://github.com/m4b/goblin/pull/260
elf: introduce "lazy" parsing of elf structure with new lazy_parse function, which allows user to fill in parts of the ELF struct they need later on;
Elf::parse_header convenience function, which allows to parse elf header from bytes without e.g., explicitly depending on scroll, etc.mach: fix debug print panic, thanks @messense: https://github.com/m4b/goblin/pull/251
elf: overflow panic when note name is 0, thanks @glandium: https://github.com/m4b/goblin/pull/256
mach: add rpaths, thanks @keith: https://github.com/m4b/goblin/pull/248
mach: add missing load commands, and fixup minversion enum and api, thanks @woodruffw !: https://github.com/m4b/goblin/pull/240
Object::parse no longer needs std! thanks @Evian-Zhang: https://github.com/m4b/goblin/pull/235pe: remove unwrap on coffheader strtab parsing, thanks @ExPixel: https://github.com/m4b/goblin/pull/222
elf: protect against out of memory when parsing, thanks @jackcmay: https://github.com/m4b/goblin/pull/219
elf: add more robust debug printing to various elf data structures, thanks @connorkuehl, e.g.: https://github.com/m4b/goblin/pull/211
BREAKING: Changes in elf::gnu_hash::GnuHash:
elf::gnu_hash::GnuHash:
new(*const u32, usize, &[sym::Sym]) -> Self
to from_raw_table(&[u8], &[Sym]) -> Result<Self, &str>find(&self, &str, u32, &Strtab) -> Option<&Sym>
to find(&self, &str, &Strtab) -> Option<&Sym>.alloc feature, stabilized in 1.36 @philipc https://github.com/m4b/goblin/pull/196
elf: support empty PT_DYNAMIC references, @jan-auer https://github.com/m4b/goblin/pull/193 elf: move various elf::Sym impls out of alloc gate, @lzutao https://github.com/m4b/goblin/pull/198
elf: parsing 0 section header had regression introduced in 779d0ce, fixed by @philipc https://github.com/m4b/goblin/pull/200
mach: don't return data for zerofill sections, @philipc https://github.com/m4b/goblin/pull/195
mach: don't return data for zerofill sections, @philipc https://github.com/m4b/goblin/pull/195
elf: Don't fail entire elf parse when interpreter is malformed string, @jsgf https://github.com/m4b/goblin/pull/192
elf: Don't fail entire elf parse when interpreter is malformed string, @jsgf https://github.com/m4b/goblin/pull/192
BREAKING: rename export to lib in Reexport::DLLOrdinal from @lzybkr
pe: Fix resolution of redirect unwind info, thanks @jan-auer https://github.com/m4b/goblin/pull/183 pe: fix reexport dll and ordinal, thanks @lzybkr: d62889f469846af0cceb789b415f1e14f5f9e402
archive: new public enum type to determine which kind of archive was parsed
pe: add write support for COFF object files!!! This is huge; we now support at a basic level writing out all major binary object formats, thanks @phil
set_name_offset compilation for 32-bit: https://github.com/m4b/goblin/pull/163Beautify debugging by using debug_struct in Debug implementation of many structs.
debug_struct in Debug implementation of many structs.goblin::elf::dyn to goblin::elf::dynamic due to dyn
become a keyword in Rust 2018 edition.mach::exports::SymbolKind::to_str(kind: SymbolKind) -> to_str(&self).strtab::Strtab::to_vec(self) -> to_vec(&self).goblin::error::Error::description would be removed. Use to_string() method instead.elf: add symbol visibility. thanks @pchickey: https://github.com/m4b/goblin/pull/119
elf: parse section header relocs even when not an object file. thanks @Techno-Coder: https://github.com/m4b/goblin/pull/118
elf: fix regression when parsing dynamic symbols from some binaries, thanks @philipc: https://github.com/m4b/goblin/issues/111
BREAKING: updated required compiler to 1.20 (due to scroll 1.20 requirement)
BREAKING: updated required compiler to 1.19 (technically only required for tests, but assume this is required for building as well)
BREAKING: pe.export: name is now optional to reflect realities of PE parsing, and add more robustness to parser. many thanks to @tathanhdinh! https://
BREAKING: elf.reloc: u64/i64 used for r_offset/r_addend, and addend is now proper optional, thanks @amanieu! https://github.com/m4b/goblin/pull/86/
n_types when N_STAB field is being used, thanks @jrmuizel! https://github.com/m4b/goblin/pull/85BREAKING: elf: iter_notes renamed to iter_note_headers
iter_notes renamed to iter_note_headersis_little_endian(), ctx(), and container() methods from header, as they were completely invalid for big-endian architectures since the header was parsed according to the endianness of the binary correctly into memory, and hence would always report MH_MAGIC or MH_MAGIC64 as the magic value.parse_magic_and_ctxiter_note_sections methodBREAKING: remove deprecated goblin::parse method
to_range removed on program and section headers; use vm_range and file_range for respective rangesfix proper std feature flag to log; this was an oversight in last version
iter_notes method to Elf objectgoblin::Object::parse; add deprecation to goblin::parse
New goblin::Object for enum containing the parsed binary container, or convenience goblin::parse(&[u8) for parsing bytes into respective container for
### Changed - Archive has a lifetime - Mach has a lifetime
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →