1# Changelog 2All notable changes to this project will be documented in this file. 3 4Before 1.0, this project does not adhere to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). 5 6Goblin is now 0.1, which means we will try our best to ease breaking changes. Tracking issue is here: https://github.com/m4b/goblin/issues/97 7 8## [0.1.2] - 2019-12-02 9### Fixed 10mach: don't return data for zerofill sections, @philipc https://github.com/m4b/goblin/pull/195 11 12## [0.1.1] - 2019-11-10 13### Fixed 14elf: Don't fail entire elf parse when interpreter is malformed string, @jsgf https://github.com/m4b/goblin/pull/192 15 16## [0.1.0] - 2019-11-3 17### Added 18- update to scroll 0.10 api 19### Changed 20- BREAKING: rename export to lib in Reexport::DLLOrdinal from @lzybkr 21- pe: only parse ExceptionData for machine X86_64, thanks @wyxloading 22### Fixed 23pe: Fix resolution of redirect unwind info, thanks @jan-auer https://github.com/m4b/goblin/pull/183 24pe: fix reexport dll and ordinal, thanks @lzybkr: d62889f469846af0cceb789b415f1e14f5f9e402 25 26## [0.0.24] - 2019-7-13 27### Added 28- archive: new public enum type to determine which kind of archive was parsed 29### Fixed 30- archive: thanks @raindev 31 * fix parsing of windows style archives: https://github.com/m4b/goblin/pull/174 32 * stricter parsing of archives with multiple indexes: https://github.com/m4b/goblin/pull/175 33 34## [0.0.23] - 2019-6-30 35### Added 36- 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 @philipc: https://github.com/m4b/goblin/pull/159 37- elf: add more e_ident constants 38- mach: add segment protection constants 39- elf: add risc-v relocation constants 40- elf: add constants for arm64_32 (ILP32 ABI on 64-bit arm) 41- pe: coff relocations and other auxiliary symbol records 42 43### Fixed 44- mach: fix 0 length data sections in mach-o segments, seen in some object files, thanks @raindev: https://github.com/m4b/goblin/pull/172 45- build: alloc build was fixed: https://github.com/m4b/goblin/pull/170 46- pe: fix `set_name_offset` compilation for 32-bit: https://github.com/m4b/goblin/pull/163 47 48## [0.0.22] - 2019-4-13 49### Added 50- Beautify debugging by using `debug_struct` in `Debug` implementation of many structs. 51- PE: fix rva mask, thanks @wickawacka: https://github.com/m4b/goblin/pull/152 52- PE: add PE exception tables, thanks @jan-auer: https://github.com/m4b/goblin/pull/136 53 54### Changed 55- Bump lowest Rust version to 1.31.1 and transition project to Rust 2018 edition. 56- BREAKING: Rename module `goblin::elf::dyn` to `goblin::elf::dynamic` due to `dyn` 57 become a keyword in Rust 2018 edition. 58- BREAKING: Rename `mach::exports::SymbolKind::to_str(kind: SymbolKind)` -> `to_str(&self)`. 59- BREAKING: Rename `strtab::Strtab::to_vec(self)` -> `to_vec(&self).` 60 61### Removed 62- BREAKING: `goblin::error::Error::description` would be removed. Use `to_string()` method instead. 63 64### Fixed 65- elf: handle some invalid sizes, thanks @philipc: https://github.com/m4b/goblin/pull/121 66 67## [0.0.21] - 2019-2-21 68### Added 69- elf: add symbol visibility. thanks @pchickey: https://github.com/m4b/goblin/pull/119 70 71## [0.0.20] - 2019-2-10 72### Added 73- elf: parse section header relocs even when not an object file. thanks @Techno-Coder: https://github.com/m4b/goblin/pull/118 74- pe: make utils public, add better examples for data directory usage. thanks @Pzixel: https://github.com/m4b/goblin/pull/116 75 76## [0.0.19] - 2018-10-23 77### Added 78- elf: fix regression when parsing dynamic symbols from some binaries, thanks @philipc: https://github.com/m4b/goblin/issues/111 79 80## [0.0.18] - 2018-10-14 81### Changed 82 - BREAKING: updated required compiler to 1.20 (due to scroll 1.20 requirement) 83 - BREAKING: elf: removed bias field, as it was misleading/useless/incorrect 84 - BREAKING: elf: add lazy relocation iterators: Thanks @ibabushkin https://github.com/m4b/goblin/pull/102 85 - BREAKING: mach: remove repr(packed) from dylib and fvmlib (this should not affect anyone): https://github.com/m4b/goblin/issues/105 86### Added 87 - elf: use gnu/sysv hash table to compute sizeof dynsyms more accurately: again _huge_ thanks to @philipc https://github.com/m4b/goblin/pull/109 88 - elf: handle multiple load biases: _huge_ thanks @philipc: https://github.com/m4b/goblin/pull/107 89 - mach: add arm64e constants: Thanks @mitsuhiko https://github.com/m4b/goblin/pull/103 90 - PE: calculate read bytes using alignment: Thanks @tathanhdinh https://github.com/m4b/goblin/pull/101 91 - PE: get proper names for PE sections: Thanks @roblabla https://github.com/m4b/goblin/pull/100 92 93## [0.0.17] - 2018-7-16 94### Changed 95 - BREAKING: updated required compiler to 1.19 (technically only required for tests, but assume this is required for building as well) 96 - fixed nightly alloc api issues: https://github.com/m4b/goblin/issues/94 97 98## [0.0.16] - 2018-7-14 99### Changed 100 - BREAKING: pe.export: name is now optional to reflect realities of PE parsing, and add more robustness to parser. many thanks to @tathanhdinh! https://github.com/m4b/goblin/pull/88 101 - elf.note: treat alignment similar to other tools, e.g., readelf. Thanks @xcoldhandsx: https://github.com/m4b/goblin/pull/91 102### Added 103 - elf: more inline annotations on various methods, thanks@amanieu: https://github.com/m4b/goblin/pull/87 104 105## [0.0.15] - 2018-4-22 106### Changed 107 - 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/ 108 - update to scroll 0.9 109 - pe32+: parse better, thanks @kjempelodott, https://github.com/m4b/goblin/pull/82 110### Added 111 - mach: add constants for `n_types` when `N_STAB` field is being used, thanks @jrmuizel! https://github.com/m4b/goblin/pull/85 112 - elf: implement support for compressed headers, thanks @rocallahan! https://github.com/m4b/goblin/pull/83 113 - new nightly "alloc" feature: allows compiling the goblin parser on nightly with extern crate + no_std, thanks @philipc! https://github.com/m4b/goblin/pull/77 114 - mach.segments: do not panic on bad internal data bounds: https://github.com/m4b/goblin/issues/74 115 - mach: correctly add weak dylibs to import libs: https://github.com/m4b/goblin/issues/73 116 117## [0.0.14] - 2018-1-15 118### Changed 119- BREAKING: elf: `iter_notes` renamed to `iter_note_headers` 120- BREAKING: mach: remove `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. 121- elf: courtesy of @jan-auer, note iterator now properly iterates over multiple PH_NOTEs 122### Added 123- mach: added hotly requested feature - goblin now has new functionality to parse big-endian, powerpc 32-bit mach-o binaries correctly 124- mach: new function to correctly extract the parsing context for a mach-o binary, `parse_magic_and_ctx` 125- elf: note iterator has new `iter_note_sections` method 126 127## [0.0.13] - 2017-12-10 128### Changed 129- BREAKING: remove deprecated goblin::parse method 130- BREAKING: ELF `to_range` removed on program and section headers; use `vm_range` and `file_range` for respective ranges 131- Technically BREAKING: @philipc added Symtab and symbol iterator to ELF, but is basically the same, unless you were explicitly relying on the backing vector 132- use scroll 0.8.0 and us scroll_derive via scroll 133- fix notes including \0 terminator (causes breakage because tools like grep treat resulting output as a binary output...) 134### Added 135- pe: add PE characteristics constants courtesy @philipc 136- mach: SizeWith for RelocationInfo 137- mach: IOWrite and Pwrite impls for Nlist 138 139## [0.0.12] - 2017-10-29 140### Changed 141- fix proper std feature flag to log; this was an oversight in last version 142- proper cputype and cpusubtype constants to mach, along with mappings, courtesy of @mitsuhiko 143- new osx and ios version constants 144- all mach load commands now implement IOread and IOwrite from scroll 145- add new elf::note module and associated structs + constants, and `iter_notes` method to Elf object 146- remove all unused muts; this will make nightly and future stables no longer warn 147 148### Added 149- fix macho nstab treatment, thanks @philipc ! 150- mach header cpusubtype bug fixed, thanks @mitsuhiko ! 151 152## [0.0.11] - 2017-08-24 153### Added 154- goblin::Object::parse; add deprecation to goblin::parse 155- MAJOR archive now parses bsd style archives AND is zero-copy by @willglynn 156- MAJOR macho import parser bug fixed by @willglynn 157- added writer impls for Section and Segment 158- add get_unsafe to strtab for Option<&str> returns 159- relocations method on mach 160- more elf relocations 161- mach relocations 162- convenience functions for many elf structures that elf writer will appreciate 163- mach relocation iteration 164- update to scroll 0.7 165- add cread/ioread impls for various structs 166 167### Changed 168- BREAKING: sections() and section iterator now return (Section, &[u8]) 169- Segment, Section, RelocationIterator are now in segment module 170- removed lifetime from section, removed data and raw data, and embedded ctx 171- all scroll::Error have been removed from public API ref #33 172- better mach symbol iteration 173- better mach section iteration 174- remove wow_so_meta_doge due to linker issues 175- Strtab.get now returns a Option<Result>, when index is bad 176- elf.soname is &str 177- elf.libraries is now Vec<&str> 178 179## [0.0.10] - 2017-05-09 180### Added 181- New goblin::Object for enum containing the parsed binary container, or convenience goblin::parse(&[u8) for parsing bytes into respective container format 182### Changed 183- All binaries formats now have lifetimes 184- Elf has a lifetime 185- Strtab.new now requires a &'a[u8] 186- Strtab.get now returns a scroll::Result<&'a str> (use strtab[index] if you want old behavior and don't care about panics); returning scroll::Error is a bug, fixed in next release 187 188## [0.0.9] - 2017-04-05 189### Changed 190- Archive has a lifetime 191- Mach has a lifetime 192