libffi-0.1: A binding to libffi



This is the only module that normal users should need to import.

As an example, allocate 1GB of memory, zero it, and crash:

import System.Posix.DynamicLinker
import Foreign.Ptr
import Foreign.LibFFI

main = do
    malloc <- dlsym Default "malloc"
    memset <- dlsym Default "memset"
    p <- callFFI malloc (retPtr retVoid) [argCSize (2^30)]
    callFFI memset (retPtr retVoid) [argPtr p, argCInt 0, argCSize (2^30)]
    callFFI memset (retPtr retVoid) [argPtr nullPtr, argCInt 0, argCSize 1]


data Arg Source

data RetType a Source


callFFI :: FunPtr a -> RetType b -> [Arg] -> IO bSource

withRetType :: (a -> IO b) -> RetType a -> RetType bSource