hdis86 is an interface to the udis86 disassembler, which decodes machine
code for 16-, 32-, and 64-bit x86 and x86-64 / AMD64 processors. hdis86
provides an instruction stream as a Haskell algebraic data type, suitable for
inspection by pattern matching. It also provides metadata such as assembly
syntax in Intel or AT&T flavors.
This library exposes three layers of wrapping:
The Pure module has the simplest interface, effectively
ByteString -> [Instruction].
The IO module exposes an imperative API closely matching the udis86
state machine, while providing Haskellish types and automatic resource
management.
The C module is a direct import of the udis86 library, with C types
and conventions.
Many users can simply import Hdis86.
The Incremental module provides disassembly of lazy ByteStrings, and a
function for building other incremental operations.
By default, hdis86 will statically link a built-in copy of udis86-1.7,
which is provided by its author under a similar BSD license. See inside the
tarball for more information. If you have udis86 installed on your system,
you can instead link dynamically using
cabal configure --flags=external-udis86. In that case see also doc/customizing.txt.
This code is available on GitHub at https://github.com/kmcallister/hdis86.
The udis86 project website is located at http://udis86.sourceforge.net/.
New in version 0.2:
Disassembly of lazy ByteStrings
A function for building other incremental operations
Record selectors on Instruction
QuickCheck Arbitrary instances for Instruction and related types