Dyninst 9.x

v9.3.2 Distribution Files

Version 9.3.2

Released on April 5, 2017

Improvements from 9.3.1

  • i386 build fixes
  • Fixes for binary rewriter tests
  • Many ARMv8 decoding fixes verified
  • Bug fixes for relocating functions with exception handling
  • Bug fixes for reference counting of type objects
  • Documentation updates

v9.3.1 Distribution Files

Version 9.3.1

Released on March 2, 2017

Includes minor bugfixes from 9.3.0

v9.3.0 Distribution Files

Version 9.3.0

Released on December 22, 2016

New features

  • Full support for Knight's Landing processors
  • First official release of ParseAPI for ARMv8
  • First release of cross-architecture binary analysis capabilities (parsing of ARM binaries on x86 and vice versa, for example). PowerPC parsing still requires compile-time selection of endianness; a fix for this is coming in 9.3.1. This is a significant step in our long road to making Dyninst's host and target platforms fully independent from each other.
  • Dyninst can now safely relocate and instrument code containing C++ exceptions.
  • Documented various ProcControl and Stackwalker tracking/tracking control interfaces.
  • Read access to Symtab and ParseAPI data structures should now be thread-safe, provided that you force eager creation of those data structures. If there exist data structures that cannot be eagerly created and are thus thread-unsafe for your use case, please let us know.
  • Automatic detection of Dyninst runtime library location (currently Unix-ish only, Windows support to follow in 9.3.1).
  • Cotire added to speed up build. If building with GCC, this requires version >= 4.5.0; for all compilers, this requires CMake >= 2.8.12.
  • Improvements to stack analysis on x86

Improvements from 9.2.0

  • Fixed segfault when a process is attached without specifying executable name
  • Fixed crash in liveness
  • Fixed assert when running stack modifications on SPEC
  • Fixed multiple jump table parsing issues
  • Fixed findMain analysis for stripped binaries
  • Assorted fixes in line information handling
  • Assorted fixes for race conditions in ProcControl
  • Fixed cases where Dyninst heaps were not allocated sufficiently close to the code being relocated into them
  • Ensured stack modification code is only built on supported platforms (x86/Linux for now)

v9.2.0 Distribution Files

Version 9.2.0

Released on June 29, 2016

New features

  • ARM64 SIMD support in InstructionAPI
  • Support for all x86 instruction sets up to Knight's Landing (AVX, AVX2, AVX512)
  • DataflowAPI now has an official manual
  • Initial ppc64/little endian support in Symtab, InstructionAPI, ProcControl, and Stackwalker. Add -Darch_ppc64_little_endian to your CMake command line when building on little-endian ppc64 systems
  • New InstructionAPI test framework based on structured fuzzing. This resulted in finding (and fixing) lots of corner-case instruction parsing errors. The fuzzer framework, called Peach, will be released later this year.
  • Main source code repository has moved to GitHub. Older Dyninst releases may be found at https://github.com/dyninst/dyninst/releases

Improvements from 9.1.0

  • PIE binaries should now be rewritten correctly, even if they have a zero base address
  • Symtab should now correctly file symbols into their associated modules based on the best available DWARF information
  • Many more fixes in x86 instruction decoding
  • Enhancements to jump table analysis
  • PC-relative memory accesses in VEX instructions can now be relocated correctly
  • Various proccontrol bug fixes
  • RTlib's DYNINSTos_malloc and DYNINSTos_free should now be signal-safe
  • RTlib's tramp guard lock/unlock functions should now avoid making implicit function calls (which are unsafe from tramp guard code)
  • ppc64 bit rot for create/attach modes is fixed

Known Issues

  • ppc64 rewriter mode does not yet handle code that does not conform to the "caller sets up TOC" model for intermodule calls
  • Windows 64-bit mode is not yet supported
  • Windows rewriter mode is not yet supported
  • Exceptions in relocated code will not be caught
  • Linux rewriter mode for 32-bit, statically linked binaries does not support binaries with .plt, .rel, or .rela sections.
  • Callbacks at thread or process exit that stop the process will deadlock when a SIGSEGV occurs on a thread other than the main thread of a process
  • InstructionAPI's format() method does not produce AT&T syntax output
  • Stackwalker is fragile on Windows
  • Parsing a binary with no functions (typically a single object file) will crash at CodeObject destruction time.

v9.1.0 Distribution Files

Version 9.1.0

Released on December 15, 2015

Interface changes

  • Shared objects and executables now both correspond to BPatch_objects, and their constituent .o files correspond to BPatch_modules

New features

  • Initial ARM64 implementation of InstructionAPI (SIMD instructions are currently not supported)
  • New code example: disassembler
  • Boost should now auto-detect up to version 1.59

Improvements from 9.0.3

  • Fixed LD_PRELOAD support
  • Relocation and instrumentation no longer trigger unnecessary parsing on Windows
  • Windows no longer misidentifies calling conventions due to use-after-free string corruption
  • Slicing no longer attempts to follow edges to or from catch blocks

Known Bugs

  • See 9.0.3 Known Bugs.

v9.0.3 Distribution Files

Version 9.0.3

Released on August 28, 2015
Improvements from 9.0.2

  • Minor bugfixes.

Known Bugs

  • See 9.0.2 Known Bugs.

v9.0.2 Distribution Files

Version 9.0.2

Released on August 24, 2015
Improvements from 9.0.1

  • Minor bugfixes.

Known Bugs

  • See 9.0.1 Known Bugs.

v9.0.1 Distribution Files

Version 9.0.1

Released on August 21, 2015
Improvements from 9.0.0

  • Minor bugfixes.

Known Bugs

  • See 9.0.0 Known Bugs.

v9.0.0 Distribution Files

Version 9.0.0

Released on August 20, 2015
Improvements from 8.2.1

  • Dyninst now allows modification of the stack frames of functions. See the manual for details.
  • SD-Dyninst is now integrated into the Dyninst main line. See the manual for details.
  • Machine learning based gap parsing rules are now integrated into Dyninst, and no longer need to be compiler-specific. Gap parsing should find significantly more function entry points, particularly when run on code generated by non-GNU compilers.
  • SymtabAPI now provides information about inlined functions. See the manual for details.
  • SymtabAPI (in read-only mode), ProcControl, and Stackwalker (in 3rd-party mode) now work on ARM64 Linux.
  • Loops are now represented in ParseAPI and PatchAPI, as well as at the BPatch level. The loop interface has been extended to represent irreducible loops correctly; see the manual for details.
  • Indirect control flow is now analyzed by a principled, slicing-based approach and its accuracy is substantially improved.
  • SymtabAPI and ParseAPI should consume much less memory for representing symbols, symbol indexes, line information, block extents, and function extents. There will be a small CPU penalty when opening files under SymtabAPI in exchange for this.
  • ProcControl, in conjunction with Symtab, now supports accessing variables located in thread-local storage on Linux. See the manual for details.
  • TrampGuards have been optimized.
  • Compile-time thread limit on mutatees has been removed.
  • Fixes in ProcControl's exit handling code.

Known Bugs

  • Windows: inserting call snippets to call __thiscall or __fastcall functions is unsafe. __cdecl and __stdcall work.
  • Windows: binary rewriting is still not supported, but is coming soon.