What's New in Dyninst
Dyninst Team: James Kupsch, Ronak Chauhan, Angus He
Abstract
Binary analysis and instrumentation is a key technology to support
performance profiling, debugging, testing, software security, and auditing.
Dyninst is an open source suite of libraries providing binary analysis,
instrumentation and control capabilities across several hardware
architectures with an architecture-independent abstraction. It supports
both dynamic (runtime) and static (binary rewriting) instrumentation of a
binary program. Dyninst is opportunistic in that it uses symbol and debug
information when it is available, but can operate without it, even on
stripped binaries. Dyninst's analysis capabilities produce a control- and
data-flow analysis of the program, identifying functions, loops, and basic
blocks in the code. Dyninst allows fine-grained program instrumentation and
modification based on a high-level (control flow graph) abstraction of a
program.
Dyninst is structured as a suite of toolkit libraries, providing
architecture independent interfaces to features such as instruction
decoding, control flow analysis, data flow analysis, code generation, code
patching (splicing) and symbol table processing. On the dynamic side, it
also includes process control and stack walking support.
Dyninst has been used as the foundation for products from companies like
AMD, Cray, and Red Hat, as the basis for tools from national labs and
research groups, and as a key component in hundreds of academic research
projects. It continues to have the dual role of providing a foundation for
new instrumentation and analysis research combined with support for key
applications of binary analysis and instrumentation.
Since the last workshop, Dyninst has seen myriad improvements to
functionality and code quality. Examples include AMD MI300 GPU support; AMD
GPU indirect branch support; improved x86 instruction parsing, mnemonics,
missing instructions, and properties (syscall, interrupt, NOP); improved
instruction formatting; improved DWARF type and CU parsing; improved
parsing line maps; new compiler and glibc support; and CI improvements.
In this talk, we will review the features and structure of Dyninst,
summarize the new developments, and present some practical examples of how
you can use it.