bindings-bfd-0.1.3: src/Bindings/Bfd/Disassembler.hs
-- This file is part of Bindings-bfd.
--
-- Copyright (C) 2010 Michael Nelson
--
-- Bindings-bfd is free software: you can redistribute it and/or modify
-- it under the terms of the GNU Lesser General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- Bindings-bfd is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU Lesser General Public License for more details.
-- You should have received a copy of the GNU Lesser General Public License
-- along with Bindings-bfd. If not, see <http://www.gnu.org/licenses/>.
module Bindings.Bfd.Disassembler where
import Foreign.C
import Foreign.Ptr
import System.Posix.IO
import Bindings.Bfd.Disassembler.Info
import Bindings.Bfd.Misc
type Disassembler = FunPtr Disassembler'
type Disassembler' = Vma' -> Info0 -> IO CInt
run
:: (Integral a)
=> Disassembler
-> Info
-> a
-> IO (String, Int)
run disasm (Info info fd) vma =
do
let
vma' = fromIntegral vma
f = d_run disasm vma' info
len <- f
(str,_) <- fdRead fd 80 -- arbitrarily longer than any possible assembler expression (we hope)
return (str, fromIntegral len :: Int)
foreign import ccall unsafe "dynamic" d_run
:: Disassembler -> Disassembler'