DyninstAPI: Tools for binary instrumentation, analysis, and modification.
C C++ PostScript Assembly TeX CMake Other
Latest commit 86d44d2 Feb 1, 2017 @wrwilliams wrwilliams committed on GitHub Merge pull request #314 from dyninst/release10.0.0/fixes/stackmod-dis…
…p-fixes

Displacement validation checks updated
Permalink
Failed to load latest commit information.
.idea Remove IDE files from repo Oct 31, 2016
cmake Merge pull request #318 from dyninst/url_libelf_update Feb 1, 2017
common Fix warnings Jan 29, 2017
dataflowAPI Merge pull request #168 from pefoley2/types Jan 29, 2017
dwarf Check cmake version to make sure cotire is supported Aug 30, 2016
dynC_API Fix writable string warning Nov 21, 2016
dyninstAPI Merge pull request #314 from dyninst/release10.0.0/fixes/stackmod-dis… Feb 1, 2017
dyninstAPI_RT Merge pull request #168 from pefoley2/types Jan 29, 2017
elf Fix omitting leading 0's when concatenating hex bytes in stringstream Dec 13, 2016
external Merge ARM jump table parsing and instruction semantics into master Nov 11, 2016
instructionAPI Update manual version numbers and minor fixes Dec 7, 2016
parseAPI Fix warnings Jan 29, 2017
parseThat fix warnings under lto Nov 25, 2016
patchAPI Update manual version numbers and minor fixes Dec 7, 2016
proccontrol Fix warnings Jan 29, 2017
scripts Initial cmake fixes May 22, 2015
stackwalk Merge pull request #168 from pefoley2/types Jan 29, 2017
symlite Determine the architecture of an ELF by looking at the file header in… Nov 10, 2016
symtabAPI Fix warnings Jan 29, 2017
syscalls new file: .syntastic_cpp_config May 22, 2015
valueAdded Purge AIX support Jan 16, 2014
.gitignore Merge pull request #186 from dyninst/release9.2/fixes/eh_frame_rewriting Nov 14, 2016
.syntastic_cpp_config new file: .syntastic_cpp_config May 22, 2015
.travis.yml cotire Aug 21, 2016
CMakeLists.txt dynC for Windows Nov 11, 2016
COPYRIGHT Update version strings to 8.1.1; retire DepGraphAPI Mar 14, 2013
ChangeLog Updated docs to reflect make.config.local required vars, and to update Jun 23, 2006
DyninstConfigVersion.cmake CMake integration for Windows. Jun 26, 2013
INSTALL Updated various READMEs Aug 20, 2015
LGPL Update copyright disclaimer structure by outlining copyright notice. … Jul 27, 2012
README.md Fixed heading markdown Dec 21, 2016
appveyor.yml build x64 on appveyor Nov 11, 2016

README.md

Dyninst

Branch states

Branch Status Notes
master stable See below
arm64 experimental

Notes

  • Known issues should have open issues associated with them.
  • ARM64 support in Dataflow/ParseAPI is experimental and incomplete.
  • PPC64/little endian support in read-level interfaces (symtab, stackwalker, proccontrol) is experimental.
  • PPC64/little endian support in write-level interfaces is not implemented.

All non-API-breaking bug fixes should land here. All non-ABI-breaking bug fixes should also land on v9.2.x.

Build DyninstAPI and its subcomponents

Configuration

Dyninst is now built via CMake. We recommend performing an interactive configuration with "ccmake ." first, in order to see which options are relevant for your system. You may also perform a batch configuration with "cmake .". Options are passed to CMake with -DVAR=VALUE. Common options include:

Boost_INCLUDE_DIR 
CMAKE_BUILD_TYPE 
CMAKE_INSTALL_PREFIX
LIBDWARF_INCLUDE_DIR 
LIBDWARF_LIBRARIES 
LIBELF_INCLUDE_DIR
LIBELF_LIBRARIES 
IBERTY_LIBRARIES

CMake's default generator on Linux is normally "Unix Makefiles", and on Windows, it will normally produce project files for the most recent version of Visual Studio on your system. Other generators should work but are not tested. After the CMake step concludes, you will have appropriate Makefiles or equivalent and can build Dyninst.

We require CMake 2.6 as a minimum on all systems, and CMake 2.8.11 allows us to automatically download and build libelf/libdwarf/binutils on ELF systems if they are needed. If you do not have a sufficiently recent CMake, you may need to manually specify the location of these dependencies. If you are cross-compiling Dyninst, including builds for various Cray and Intel MIC systems, you will either need a toolchain file that specifies how to properly cross-compile, or you will need to manually define the appropriate compiler, library locations, include locations, and the CROSS_COMPILING flag so that the build system will properly evaluate what can be built and linked in your environment.

Building and installing

To build Dyninst and all its components, "make && make install" from the top-level directory of the source tree. To build and install a single component and its dependencies, do the same thing from that component's subdirectory. Libraries will be installed into CMAKE_INSTALL_PREFIX/INSTALL_LIB_DIR, and headers will be installed into CMAKE_INSTALL_PREFIX/INSTALL_INCLUDE_DIR. If you wish to import Dyninst into your own CMake projects, the export information is in CMAKE_INSTALL_PREFIX/INSTALL_CMAKE_DIR. PDF documentation is included and installed to CMAKE_INSTALL_PREFIX/INSTALL_DOC_DIR. If you update the LaTeX source documents for any manuals, "make doc" will rebuild them. Components may be built and installed individually: "make $COMPONENT" and "make $COMPONENT-install" respectively; this will appropriately respect inter-component dependencies.

What's new

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.

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.