Interface to the udis86 disassembler for x86 and x86-64 / AMD64
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, effectivelyByteString -> [Instruction]
.The
IO
module exposes an imperative API closely matching theudis86
state machine, while providing Haskellish types and automatic resource management.The
C
module is a direct import of theudis86
library, with C types and conventions.
Many users can simply import Hdis86
.
The Incremental
module provides disassembly of lazy ByteString
s, 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
ByteString
sA function for building other incremental operations
Record selectors on
Instruction
QuickCheck
Arbitrary
instances forInstruction
and related types