Skip to content

@hainest hainest released this Jun 15, 2021

Enhancements

  • Position-Independent Executable (PIE) handling
    • Dyninst now correctly determines the properties of PIE binaries
    • position-independent executable archive files (i.e., built with -static-pie using gcc) are not supported

Bug fixes

  • DWARF
    • Correctly handle return values from dwarf_getabbrevcode
  • Parsing
    • Fix data races from PowerPC when using more than 15 OpenMP threads
    • Skip parsing of blocks with an empty code buffer
    • Correctly parse catch blocks
    • Do not treat symbols in any text sections as data (.text, .init, or .fini)
    • Fix implicit operand decoding of x86 instructions on non-x86 architectures
  • Build system
    • Pass CMake build flags when configuring dyninstAPI_RT
    • Correctly find version information when building against tbb 2021.3 or newer

See the complete CHANGELOG


Manuals

Assets 2

@hainest hainest released this Apr 8, 2021

Removed deprecated functionality

  • JumpTableIndexPred::FillInOutEdges
  • BoundFactCalculator::CheckZeroExtend
  • BoundsFactCalculator::ThunkBound
  • binaryEdit::deleteBinaryEdit
  • CFGFactor::destroy_all
  • BPatch_regExpr
  • BPatch_addressSpace::findFunctionByAddr
  • insnCodeGen::generate
  • AddressSpace::getAddressWidth
  • BPatch_process::enableDumpPatchedImage
  • BPatch_snippet::getCost*
  • InstrucIter, vectorSet, and lineDict classes
  • Support for bluegene, vxworks, sparc, and AIX
  • Replace pdvector with std::vector
  • The entire serialization infrasturcture

Minimum version requirements

  • Boost >= 1.67
  • gcc >= 6.0
  • Standards-compliant c++11 ABI in lib[std]c++

Enhancements

  • DWARF handling
    • Fully support separate debug files
    • Disable parallel parsing of DWARF due to a thread safety issue in elfutils
    • Support debuginfod
  • GPUs
    • Initial support for AMD and Intel GPU code parsing
    • Code slicing on NVIDIA GPUs
  • Code cleanup
    • Substantially reduce number of compiler warnings in public headers
  • BPatch
    • Callee lookup defaults to "by name" when other modes fail

Bug fixes

  • Symtab
    • Fix non-deterministic inline function lookup for OpenMP outlined code
    • Handle C++ name demangling correctly and uniformly
  • Indirect call analysis
    • Fix detection of indirect calls to PLT stubs subtly broken by v10.2.1
  • Patch memory leaks in emitElf

See the complete CHANGELOG.


Manuals

Assets 2

@hainest hainest released this Sep 10, 2020

Bug fixes

  • Memory leak fixes
    • Correct a substantial leak in singleton_object_pool affecting InstructionAPI
    • Fix instruction decoding leaks for power and aarch64
    • Fix memory leak in SymEval::expandInsn
    • Fix aliasing bug of Region::buffer on copy
    • Cleanup memory handling when emitting Elf for static libraries

Enhancements

  • Code cleanup
    • Remove use of deprecated C++ exception specifications
    • Remove deprecated parts of BPatch_flowGraph and miniTramp

Build changes

  • Remove use of cotire
  • Fix cmake configuration when building with -pie

Manuals

Assets 2

@mxz297 mxz297 released this Sep 9, 2020

Enhancements

  • Improve analysis and instrumentation of large binaries
    • Handle ELF extended numbering
    • Fix memory leaks that prevent instrumentation for large binaries
  • Improve parallel code parsing and dwarf parsing
    • Implement control flow trimming that removes wrong edges
    • Remove mutual exclusion in constructing index structures from basic blocks to functions
    • Improve jump table analysis involving global variables
  • ARM binary rewriting for dynamically-linked objects
  • Improve DWARF parsing
    • Support abstract origin attribute
    • Support one machine instruction address mapped to multiple source lines
    • Support parsing of relocatable objects
  • Remove usage of GNU extensions for varargs
  • Handle "ghost" threads in proccontrol
    • "Ghost" threads are stopped threads killed by the OS (or user) before proccontrol continues them

Bug fixes

  • Fix instrumentation regressions, including libc-2.29 on ARM, shared libraries instrumentation, corruption to registers
  • Fix rewriting static binaries about searching libgcc.a on x86 and aarch64
  • Cleanup undefined C++ behaviors
  • Many fixes to code examples in the documentation

Build changes

  • Use modern CMake features to enforce language support at build time
  • Add "sterile build" option to prevent Dyninst from building its own dependencies
  • Improve Clang support when building Intel TBB from source

Deprecations

  • Removed support for running on IBM Blue Gene

Dyninst Toolkit Examples

  • Code examples previously contained in the 'examples' directory have been moved to their own repository dyninst/examples.

Manuals

Assets 2

@mxz297 mxz297 released this May 16, 2019

New Features

  • Full support of dynamic instrumentation on ARMv8
  • Significant improvement of stack walking on ARMv8
  • Adding instruction decoding support for AMD instruction extensions, such as XOP and FMA4
  • Enhancement of the build system for checking and installing dependencies (see wiki for important details)
  • Updated the Spack recipe for building Dyninst with appropriate Boost versions

Bug Fixes

  • More stable parallel binary code analysis
    • Identifying and fixing a couple of race conditions
    • Enforcing unique analysis order to generate deterministic results
  • Improving code generation for instrumentation on Power to conform to ABI v2
  • Improving binary rewriting on x86 and Power for
    • Position independent executables (PIEs)
    • Statically linked binaries
  • Resolving deadlocks in ProccontrolAPI
  • Improving code generation for BPatch_whileExpr on x86, Power, and ARMv8.
  • Fixing SIGILLs problems on ARMv8 caused by icache-dcache incoherence
  • Fixing supports of parsing debug information stored in separate files
  • Fixing incomplete libdw port for parsing DWARF expressions

Manuals

Assets 2

@jdetter jdetter released this Nov 9, 2018

New Features

  • Parallel binary code analysis (ParseAPI):
    • Parallel code parsing, significantly improving the speed of the analysis of large binaries
    • Parallel query to ParseAPI
    • Improve multiple aspects of parsing, including non-returning functions, tail call identification, jump table analysis
  • Partial support of dynamic instrumentation on ARMv8. Please see https://github.com/dyninst/dyninst/wiki/DyninstAPI-ARMv8-status for details.
  • Improving support for Power 8 & 9 instrumentation and new vector instruction decoding
  • Limited CUDA support: read-only queries of SymtabAPI
  • Updated Spack recipe for installing Dyninst

Software Dependency Changes

  • Adds dependency on libdw and removes dependency on libdwarf
  • Adds dependency on Intel Threading Building Blocks (TBB)
  • Adds optional dependency on OpenMP for parallel code analysis

Bug Fixes

  • x86/64 decoding Issues, including adding support for vector instructions and wrong operand sizes
  • Fix compilation issues on Arch Linux
  • Cross-architecture binary analysis: try/catch blocks
  • Improve DWARF parsing: fix dwarf symbol frame and elf section parsing
  • Improve CMake build systems: automatically downloading correct versions of Boost, TBB, and elfutils
  • Fix inferior RPC on ARMv8
  • Updated CMake build system for automatically downloading Dyninst dependencies and support parallel compilation

Manuals

Assets 2

@wrwilliams wrwilliams released this Apr 18, 2017

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

Assets 2

@wrwilliams wrwilliams released this Mar 2, 2017

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

Assets 2

@jdetter jdetter released this Dec 22, 2016

Notes

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

@wrwilliams wrwilliams released this Jun 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.

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

Manuals

dyninstAPI-9.2.0.pdf
dynC_API-9.2.0.pdf
proccontrol-9.2.0.pdf
patchAPI-9.2.0.pdf
stackwalk-9.2.0.pdf
dataflowAPI-9.2.0.pdf
parseAPI-9.2.0.pdf
instructionAPI-9.2.0.pdf
symtabAPI-9.2.0.pdf

Assets 3