Dyninst 9.3.2

@wrwilliams wrwilliams released this Apr 18, 2017 · 8 commits to v9.3.x since this release

Change Log

v9.3.2 (2017-04-05)

Full Changelog

Fixed bugs:

  • memcpy can fail with rewriter tests #355
  • dyninst does not build on i386 #343
  • [ARMv8 Decoding] SQ* instructions need to check bits with specific values #268
  • [ARMv8 Decoding] SMADDL and SMSUBL should have 32-bit register for operands 2 and 3 #266
  • [ARMv8 Decoding] SHL and SLI should have 0 for bit 11 #265
  • [ARMv8 Decoding] NEG instruction must have size = '11' #263
  • [ARMv8 Decoding] FMUL instruction cannot have size:q = '10' #262
  • [ARM Decoding] FMUL instructions cannot have 'size:L' == '11' #258
  • [ARM Decoding] Convert instruction immediate has reserved values (currently ignored) #257
  • [ARM Decoding] FCVTXN should be FCVTXN2 #255
  • [ARM Decoding] FCVT 'type' field cannot equal 'opc' field #254
  • [ARM Decoding] Reserved size value for some vector register instructions is ignored #249
  • [ARM Decoding] Stack pointer used where zero register should be #248
  • [ARM Decoding] Signed multiply instructions ignore size resitrictions #247
  • [ARM Decoding] Paired memory accesses must access aligned memory #245
  • [ARM Decoding] Convert instruction immediates appear incorrect at 64 #241
  • [ARM Decoding] Convert instruction immediate should not be larger than the register size #240
  • [ARM Syntax] Signed immediates should be shown as signed #239
  • [ARM Decoding] We should print the full operands of PRFUM #238
  • [ARM Decoding] Bad shift amounts. #233
  • [ARM Decoding] SIMD load instruction should be valid #223
  • [ARM Decoding] Decoding of MOVK instruction ignores restriction on combination of size and hw bits #222
  • [ARM Decoding] Decoding of ADDHN ignore reserved size bits #221
  • [ARM Syntax] Zero register should have sizing, either XZR or WZR #220
  • [ARM Decoding] Invalid CCMP and CCMN decoded as valid #219
  • [ARM Syntax] Shifted immediate for CCMP and CCMN #218
  • [ARM Syntax] Immediate out of range for LDRSB #217
  • [ARM Syntax] Repeated register number as constant #216

Merged pull requests:

  • CMake fixup #349 (wrwilliams)
  • Fix up exception handling code so that we only consider call instructions for exception sensitivity and its attendant emulation #347 (wrwilliams)
  • Refactor BPatch_type so it always has a reference to its underlying symtab type. #346 (wrwilliams)

* This Change Log was automatically generated by github_changelog_generator

Dyninst 9.3.1

@wrwilliams wrwilliams released this Mar 2, 2017 · 30 commits to v9.3.x since this release

Change Log

v9.3.1 (2017-03-02)

Full Changelog

Fixed bugs:

  • Abort on PPC64LE when trying to get line number info #337
  • Seg Fault on PPC64LE during attach #336
  • Memory leaks in indirect control flow analysis #322
  • BPatch_binaryEdit::writeFile() fails for stack diversification #311
  • Stackwalk issue on arm64 #303
  • Decode returns null shared pointer #288
  • Operands labelled "[empty]" with operand type mismatch (all with 0x67 prefix) #203

Merged pull requests:

* This Change Log was automatically generated by github_changelog_generator

Dyninst 9.3.0

@jdetter jdetter released this Dec 22, 2016 · 372 commits to master since this release


  • Dyninst no longer supports libelf.so.0 (non-elfutils version); it may work for your use case but it is deprecated and will become unsupported in a future release. We intend to migrate fully to the elfutils stack for elf/dwarf infrastructure support.

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

Bug Fixes

  • 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)

Dyninst 9.2.0

@wrwilliams wrwilliams released this Jun 29, 2016 · 757 commits to master since this release

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.

Bug Fixes

  • 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 handle any 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
  • 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.
  • Line information is still filed into incorrect modules for a small fraction of functions in SymtabAPI.



Dyninst 9.1.0

@wrwilliams wrwilliams released this Jun 29, 2016 · 1169 commits to master since this release


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


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


  • Many x86 decoding bugs fixed (incorrect operand sizes, incorrect
    prefix handling)
  • Memory leaks fixed in line information parsing
  • Slicing no longer attempts to follow edges to or from catch blocks
  • Exception block parsing properly matches glibc internals
  • Line information parsing should no longer erroneously fail to return
    line information; also should no longer take quadratic time
  • LD_PRELOAD again works
  • Relocation and instrumentation no longer trigger unnecessary parsing
    on Windows
  • Windows no longer misidentifies calling conventions due to
    use-after-free string corruption