A toolkit for binary analysis, instrumentation, and code modification across a variety of CPU and GPU architectures

Area: Development tools

CASS member: STEP

Description

Dyninst is a toolkit for performing analysis, instrumentation, and code modification of binary code. It can operate on a wide variety of binaries, providing the ability to instrument code for purposes as debugging, performance profiling, tracing, testing, and security hardening. Dyninst can operate statically (binary rewriting), taking an binary file as input, parsing it, and then producing as ouput the instrumented binary file. It can also operate dynamically (dynamic instrumentation), analyzing the code in a running program (process) and then modifying the code on the fly. Dyninst is opportunistic in that it can use the full debug information available in a binary or it can run on completely stripped binaries. Dyninst provides a variety of toolkits that include instruction decoding, control flow analysis, dataflow analysis, code generation, code patching, stack walking, and process control. It currently supports analysis and instrumentation for the x86-64, ARM (32 and 64 bit), and Power architectures. Dyninst also supports code analysis of AMD GPU architectures (GFX908, GFX90A, and GFX940), with code instrumentation capability available soon.

Target audience

Dyninst is intended to support tool builders across a wide variety of areas, including debugging, performance profiling, code analysis, testing, and software security.

Additional resources