Releases: dyninst/dyninst
Releases · dyninst/dyninst
Dyninst 11.0.1
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
- Correctly handle return values from
- 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
Dyninst 11.0.0
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
Dyninst 10.2.1
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
Dyninst 10.2.0
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
Dyninst 10.1.0
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
Dyninst 10.0.0
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
Dyninst 9.3.2
Change Log
v9.3.2 (2017-04-05)
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
Change Log
v9.3.1 (2017-03-02)
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:
- Replaced a bunch of asserts with graceful error handling. #340 (wrwilliams)
- Fix jump table analysis for lulesh #338 (mxz297)
- Better handling of anonymous structs and unions #335 (wrwilliams)
- Fix memory leaks found with lsan #333 (wrwilliams)
- Suppress debug message when no vsyscall page was found on arm64 #332 (wrwilliams)
- Use ifdef to guard x86 code #331 (wrwilliams)
- Fix memory leaks in indirect control flow. #329 (wrwilliams)
- Fixes for API and dependency issues in 9.3.0 #323 (wrwilliams)
* This Change Log was automatically generated by github_changelog_generator
Dyninst 9.3.0
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)
Dyninst 9.2.0
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