All notable changes to this project will be documented in this file.
Before 1.0, this project does not adhere to Semantic Versioning.
Goblin is now 0.7, which means we will try our best to ease breaking changes. Tracking issue is here: https://github.com/m4b/goblin/issues/97
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 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
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
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 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_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
PF_MASKOS
and PF_MASKPROC
, thanks @npmccallum: https://github.com/m4b/goblin/pull/281pe: 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::parse_header
convenience function, which allows to parse elf header from bytes without e.g., explicitly depending on scroll, etc.Object::parse
no longer needs std
! thanks @Evian-Zhang: https://github.com/m4b/goblin/pull/235elf::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>
.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
elf: Don't fail entire elf parse when interpreter is malformed string, @jsgf https://github.com/m4b/goblin/pull/192
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
set_name_offset
compilation for 32-bit: https://github.com/m4b/goblin/pull/163debug_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.n_types
when N_STAB
field is being used, thanks @jrmuizel! https://github.com/m4b/goblin/pull/85iter_notes
renamed to iter_note_headers
is_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_ctx
iter_note_sections
methodto_range
removed on program and section headers; use vm_range
and file_range
for respective rangesiter_notes
method to Elf object