hdis86

Interface to the udis86 disassembler for x86 and x86-64 / AMD64

https://github.com/kmcallister/hdis86

Latest on Hackage:0.2

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD-3-Clause licensed and maintained by Keegan McAllister

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