Files
TheRock/rocm-systems/projects/rocprofiler-systems/external/dyninst/instructionAPI/doc/1-Intro.tex
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

31 lines
1.9 KiB
TeX

\section{Introduction}
\label{sec:intro}
When analyzing and modifying binary code, it is necessary to translate between
raw binary instructions and an abstract form that describes the semantics of the
instructions. As a part of the Dyninst project, we have developed the
Instruction API, an API and library for decoding and representing machine
instructions in a platform-\/independent manner. The Instruction API includes
methods for decoding machine language, convenient abstractions for its analysis,
and methods to produce disassembly from those abstractions. The current
implementation supports the x86, x86-64, ARMv8-64, PowerPC-32, and PowerPC-64 instruction sets.
The Instruction API has the following basic capabilities:
\begin{itemize}
\item Decoding: interpreting a sequence of bytes as a machine instruction in a given machine language.
\item Abstract representation: representing the behavior of that instruction as an abstract syntax tree.
\item Disassembly: translating an abstract representation of a machine instruction into a string representation of the corresponding assembly language instruction.
\end{itemize}
Our goal in designing the Instruction API is to provide a representation of
machine instructions that can be manipulated by higher-\/level algorithms with
minimal knowledge of platform-\/specific details. In addition, users who need
platform-\/specific information should be able to access it. To do so, we
provide an interface that disassembles a machine instruction, extracts an
operation and its operands, converts the operands to abstract syntax trees, and
presents this to the user. A user of the Instruction API can work at a level of
abstraction slightly higher than assembly language, rather than working directly
with machine language. Additionally, by converting the operands to abstract
syntax trees, we make it possible to analyze the operands in a uniform manner,
regardless of the complexity involved in the operand's actual computation.