System.Win32.DebugApi

Win32-2.14.0.0: A binding to Windows Win32 API.

Copyright | (c) Esa Ilari Vuokko 2006
License | BSD-style (see the file LICENSE)
Maintainer | Esa Ilari Vuokko <ei@vuokko.info>
Stability | provisional
Portability | portable
Safe Haskell | Safe
Language | Haskell2010

System.Win32.DebugApi

Contents

- Debug events
- Debugging another process
- Thread control
- Thread register control
- Sending debug output to another process

Description

A collection of FFI declarations for using Windows DebugApi.

Synopsis

- type PID = DWORD
- type TID = DWORD
- type DebugEventId = (PID, TID)
- type ForeignAddress = Word32
- type PHANDLE = Ptr ()
- type THANDLE = Ptr ()
- type ThreadInfo = (THANDLE, ForeignAddress, ForeignAddress)
- type ImageInfo = (HANDLE, ForeignAddress, DWORD, DWORD, ForeignAddress)
- type ExceptionInfo = (Bool, Bool, ForeignAddress)
- data Exception
  - = UnknownException
  - | AccessViolation Bool ForeignAddress
  - | ArrayBoundsExceeded
  - | Breakpoint
  - | DataTypeMisalignment
  - | FltDenormalOperand
  - | FltDivideByZero
  - | FltInexactResult
  - | FltInvalidOperation
  - | FltOverflow
  - | FltStackCheck
  - | FltUnderflow
  - | IllegalInstruction
  - | InPageError
  - | IntDivideByZero
  - | IntOverflow
  - | InvalidDisposition
  - | NonContinuable
  - | PrivilegedInstruction
  - | SingleStep
  - | StackOverflow
- data DebugEventInfo
  - = UnknownDebugEvent
  - | Exception ExceptionInfo Exception
  - | CreateThread ThreadInfo
  - | CreateProcess PHANDLE ImageInfo ThreadInfo
  - | ExitThread TID
  - | ExitProcess PID
  - | LoadDll ImageInfo
  - | UnloadDll TID
  - | DebugString ForeignAddress Bool WORD
- type DebugEvent = (DebugEventId, DebugEventInfo)
- debugBreak :: IO ()
- isDebuggerPresent :: IO BOOL
- waitForDebugEvent :: Maybe Int -> IO (Maybe DebugEvent)
- getDebugEvents :: Int -> IO [DebugEvent]
- continueDebugEvent :: DebugEventId -> Bool -> IO ()
- debugActiveProcess :: PID -> IO ()
- peekProcessMemory :: PHANDLE -> ForeignAddress -> Int -> Ptr a -> IO ()
- readProcessMemory :: PHANDLE -> ForeignAddress -> Int -> IO (ForeignPtr a)
- pokeProcessMemory :: PHANDLE -> ForeignAddress -> Int -> Ptr a -> IO ()
- withProcessMemory :: PHANDLE -> ForeignAddress -> Int -> (Ptr a -> IO b) -> IO b
- peekP :: Storable a => PHANDLE -> ForeignAddress -> IO a
- pokeP :: Storable a => PHANDLE -> ForeignAddress -> a -> IO ()
- suspendThread :: THANDLE -> IO DWORD
- resumeThread :: THANDLE -> IO DWORD
- withSuspendedThread :: THANDLE -> IO a -> IO a
- getThreadContext :: THANDLE -> Ptr a -> IO ()
- setThreadContext :: THANDLE -> Ptr a -> IO ()
- useAllRegs :: Ptr a -> IO ()
- withThreadContext :: THANDLE -> (Ptr a -> IO b) -> IO b
- rax :: Int
- rbx :: Int
- rcx :: Int
- rdx :: Int
- rsi :: Int
- rdi :: Int
- rbp :: Int
- rip :: Int
- rsp :: Int
- segCs :: Int
- segDs :: Int
- segEs :: Int
- segFs :: Int
- segGs :: Int
- eFlags :: Int
- dr :: Int -> Int
- setReg :: Ptr a -> Int -> DWORD -> IO ()
- getReg :: Ptr a -> Int -> IO DWORD
- modReg :: Ptr a -> Int -> (DWORD -> DWORD) -> IO DWORD
- makeModThreadContext :: [(Int, DWORD -> DWORD)] -> Ptr a -> IO [DWORD]
- modifyThreadContext :: THANDLE -> [(Int, DWORD -> DWORD)] -> IO [DWORD]
- outputDebugString :: String -> IO ()

# Documentation

type PID = DWORD Source #

type TID = DWORD Source #

type DebugEventId = (PID, TID) Source #

type ForeignAddress = Word32 Source #

type PHANDLE = Ptr () Source #

type THANDLE = Ptr () Source #

type ThreadInfo = (THANDLE, ForeignAddress, ForeignAddress) Source #

type ImageInfo = (HANDLE, ForeignAddress, DWORD, DWORD, ForeignAddress) Source #

type ExceptionInfo = (Bool, Bool, ForeignAddress) Source #

data Exception Source #

Constructors

UnknownException |
AccessViolation Bool ForeignAddress |
ArrayBoundsExceeded |
Breakpoint |
DataTypeMisalignment |
FltDenormalOperand |
FltDivideByZero |
FltInexactResult |
FltInvalidOperation |
FltOverflow |
FltStackCheck |
FltUnderflow |
IllegalInstruction |
InPageError |
IntDivideByZero |
IntOverflow |
InvalidDisposition |
NonContinuable |
PrivilegedInstruction |
SingleStep |
StackOverflow |

#### Instances

Instances details

Show Exception Source # |
Instance details Defined in System.Win32.DebugApi Methods showsPrec :: Int -> Exception -> ShowS # show :: Exception -> String # showList :: [Exception] -> ShowS #

data DebugEventInfo Source #

Constructors

UnknownDebugEvent |
Exception ExceptionInfo Exception |
CreateThread ThreadInfo |
CreateProcess PHANDLE ImageInfo ThreadInfo |
ExitThread TID |
ExitProcess PID |
LoadDll ImageInfo |
UnloadDll TID |
DebugString ForeignAddress Bool WORD |

#### Instances

Instances details

Show DebugEventInfo Source # |
Instance details Defined in System.Win32.DebugApi Methods showsPrec :: Int -> DebugEventInfo -> ShowS # show :: DebugEventInfo -> String # showList :: [DebugEventInfo] -> ShowS #

type DebugEvent = (DebugEventId, DebugEventInfo) Source #

debugBreak :: IO () Source #

isDebuggerPresent :: IO BOOL Source #

# Debug events

waitForDebugEvent :: Maybe Int -> IO (Maybe DebugEvent) Source #

getDebugEvents :: Int -> IO [DebugEvent] Source #

continueDebugEvent :: DebugEventId -> Bool -> IO () Source #

# Debugging another process

debugActiveProcess :: PID -> IO () Source #

peekProcessMemory :: PHANDLE -> ForeignAddress -> Int -> Ptr a -> IO () Source #

readProcessMemory :: PHANDLE -> ForeignAddress -> Int -> IO (ForeignPtr a) Source #

pokeProcessMemory :: PHANDLE -> ForeignAddress -> Int -> Ptr a -> IO () Source #

withProcessMemory :: PHANDLE -> ForeignAddress -> Int -> (Ptr a -> IO b) -> IO b Source #

peekP :: Storable a => PHANDLE -> ForeignAddress -> IO a Source #

pokeP :: Storable a => PHANDLE -> ForeignAddress -> a -> IO () Source #

# Thread control

suspendThread :: THANDLE -> IO DWORD Source #

resumeThread :: THANDLE -> IO DWORD Source #

withSuspendedThread :: THANDLE -> IO a -> IO a Source #

# Thread register control

getThreadContext :: THANDLE -> Ptr a -> IO () Source #

setThreadContext :: THANDLE -> Ptr a -> IO () Source #

useAllRegs :: Ptr a -> IO () Source #

withThreadContext :: THANDLE -> (Ptr a -> IO b) -> IO b Source #

rax :: Int Source #

rbx :: Int Source #

rcx :: Int Source #

rdx :: Int Source #

rsi :: Int Source #

rdi :: Int Source #

rbp :: Int Source #

rip :: Int Source #

rsp :: Int Source #

segCs :: Int Source #

segDs :: Int Source #

segEs :: Int Source #

segFs :: Int Source #

segGs :: Int Source #

eFlags :: Int Source #

dr :: Int -> Int Source #

setReg :: Ptr a -> Int -> DWORD -> IO () Source #

getReg :: Ptr a -> Int -> IO DWORD Source #

modReg :: Ptr a -> Int -> (DWORD -> DWORD) -> IO DWORD Source #

makeModThreadContext :: [(Int, DWORD -> DWORD)] -> Ptr a -> IO [DWORD] Source #

modifyThreadContext :: THANDLE -> [(Int, DWORD -> DWORD)] -> IO [DWORD] Source #

# Sending debug output to another process

outputDebugString :: String -> IO () Source #