Repository navigation
Releases: CaddyGlow/HexSpell
Releases · CaddyGlow/HexSpell
Release list
HexSpell 1.2.3
- Mach-O
- Added: Decode every
DYLD_CHAINED_PTR_*format from Apple'sfixup-chains.h(arm64e userland/userland24/kernel/firmware authenticated binds and rebases,PTR_64, 32-bit, kernel/shared cache and segmented),DYLD_CHAINED_IMPORT_ADDEND/ADDEND64imports and multi-start pages viadecode_chained_pointer_asandChainedSegment::decode_pointer. - Added:
MachO::chained_fixup_slotswalks chains intoChainedFixupSlots with the on-disk word as aField, decoded pointer andrebase_vmaddr;PointerAuth::discriminatormirrors dyld's address blending. - Added:
UnixThreadCommand::program_counterreturns theLC_UNIXTHREADentry PC as aFieldfor x86, x86-64, ARM, arm64 and PowerPC thread states. - Changed: Breaking —
ChainedSegmentstores the rawpage_start[]table (page_starts: Vec<u16>,page_count) pluspointer_formatandmax_valid_pointer; usechain_starts(page).ChainedImportgainsaddendandlibrary_ordinalbecomesi32;ChainedFixupsgainsimports_format.ChainedPointer::Bind::addendbecomesi64and the enum gains authenticated, cache, segmented and non-pointer variants. - Fixed: Decode 8-bit chained import ordinals 128–240 as dylib ordinals instead of negative special values.
- Documentation: Optional LIEF differential test for chained fixups (
tests/lief.rs).
- Added: Decode every
HexSpell 1.2.1
-
General
- Fixed: Return
BufferOverflowfor integer reads whose file offsets overflowusize.
- Fixed: Return
-
PE
- Fixed: Reject cyclic or excessively deep resource directory trees instead of overflowing the stack.
-
ELF
- Fixed: Reject overflowing extended section-table offsets instead of panicking.
- Fixed: Validate init/fini array extents before reserving entry storage.
- Fixed: Validate symbol table extents before reserving entry storage.
-
Mach-O
- Fixed: Reject cyclic export tries using an iterative traversal instead of overflowing the call stack.
- Fixed: Validate symbol table extents before reserving entry storage.
Includes executable-format fuzzing harnesses and regression coverage.
HexSpell 1.2.0
Read-only executable parsing now borrows file buffers and streams directory entries while retaining owned buffers for editing.
- PE: lazy base relocations, streaming imports/exports/relocations/debug records, borrowed names, deduplicated import descriptors, and an optional RVA lookup index.
- ELF: allocation-free header/entry inspection and borrowed section/symbol names.
- Mach-O: single-pass command iteration, allocation-free FAT selection, borrowed dylib paths, and disk-based selection that reads only the selected record and thin slice.
- Full parsers validate table extents before reserving capacity. Allocation regression tests and a dependency-free release benchmark cover the new paths.
- Includes the PE layout, load-configuration, debug-field, checksum, and structural-edit fixes documented in the changelog.
Breaking API migrations:
- Replace the
PE::base_relocationsfield withbase_relocations()?orbase_relocations_iter()?. Relocation validation is deferred until access or image-base editing. - Replace the
ImportDirectory::descriptorsfield withdescriptors()or each DLL'sdescriptorfield.
See the migration guide and changelog.
Validated with formatting, Clippy, the full test suite, no_std checks, all 12 pefile differential tests over a 15-file corpus, allocation tests, release benchmarks, and a clean package publish dry run.
HexSpell 1.1.2
- Fix PE32+ SecurityCookie parsing and patching: the field starts at byte 88 after the eight-byte EditList.
- Reject undersized load configuration structures and check declared extent arithmetic while accepting larger versions.
- Include certificate directory bounds validation and TLS offset overflow fixes.
Regression coverage includes distinct EditList/cookie sentinels, patch preservation, and truncated/versioned extents.
Validated with cargo fmt, cargo clippy --all-targets -- -D warnings, cargo test, and cargo publish --dry-run --locked.