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
31 lines
1.9 KiB
TeX
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.
|