macaw-base
Safe HaskellNone
LanguageHaskell2010

Data.Macaw.Architecture.Info

Description

This defines the architecture-specific information needed for code discovery.

Synopsis

Documentation

data ArchitectureInfo arch Source #

This records architecture specific functions for analysis.

Constructors

ArchitectureInfo 

Fields

postCallAbsState Source #

Arguments

:: ArchitectureInfo arch 
-> AbsProcessorState (ArchReg arch) ids

Processor state at call.

-> RegState (ArchReg arch) (Value arch ids)

Register values when call occurs.

-> ArchSegmentOff arch

Return address

-> AbsBlockState (ArchReg arch) 

type DisassembleFn arch Source #

Arguments

 = forall s ids. NonceGenerator (ST s) ids 
-> ArchSegmentOff arch

The offset to start reading from.

-> RegState (ArchReg arch) (Value arch ids)

Initial values to use for registers.

-> Int

Maximum offset for this to read from.

-> ST s (Block arch ids, Int) 

Function for disassembling a range of code (usually a function in the target code image) into blocks.

A block is defined as a contiguous region of code with a single known entrance and potentially multiple exits.

This returns the list of blocks, the number of bytes in the blocks, and any potential error that prematurely terminated translating the block.

Block classification

type BlockClassifier arch ids = BlockClassifierM arch ids (ParsedContents arch ids) Source #

data BlockClassifierM arch ids a Source #

The underlying monad for the BlockClassifier, which handles collecting matching errors

Instances

Instances details
MonadFail (BlockClassifierM arch ids) Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

fail :: String -> BlockClassifierM arch ids a #

Alternative (BlockClassifierM arch ids) Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

empty :: BlockClassifierM arch ids a #

(<|>) :: BlockClassifierM arch ids a -> BlockClassifierM arch ids a -> BlockClassifierM arch ids a #

some :: BlockClassifierM arch ids a -> BlockClassifierM arch ids [a] #

many :: BlockClassifierM arch ids a -> BlockClassifierM arch ids [a] #

Applicative (BlockClassifierM arch ids) Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

pure :: a -> BlockClassifierM arch ids a #

(<*>) :: BlockClassifierM arch ids (a -> b) -> BlockClassifierM arch ids a -> BlockClassifierM arch ids b #

liftA2 :: (a -> b -> c) -> BlockClassifierM arch ids a -> BlockClassifierM arch ids b -> BlockClassifierM arch ids c #

(*>) :: BlockClassifierM arch ids a -> BlockClassifierM arch ids b -> BlockClassifierM arch ids b #

(<*) :: BlockClassifierM arch ids a -> BlockClassifierM arch ids b -> BlockClassifierM arch ids a #

Functor (BlockClassifierM arch ids) Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

fmap :: (a -> b) -> BlockClassifierM arch ids a -> BlockClassifierM arch ids b #

(<$) :: a -> BlockClassifierM arch ids b -> BlockClassifierM arch ids a #

Monad (BlockClassifierM arch ids) Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

(>>=) :: BlockClassifierM arch ids a -> (a -> BlockClassifierM arch ids b) -> BlockClassifierM arch ids b #

(>>) :: BlockClassifierM arch ids a -> BlockClassifierM arch ids b -> BlockClassifierM arch ids b #

return :: a -> BlockClassifierM arch ids a #

MonadReader (BlockClassifierContext arch ids) (BlockClassifierM arch ids) Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

ask :: BlockClassifierM arch ids (BlockClassifierContext arch ids) #

local :: (BlockClassifierContext arch ids -> BlockClassifierContext arch ids) -> BlockClassifierM arch ids a -> BlockClassifierM arch ids a #

reader :: (BlockClassifierContext arch ids -> a) -> BlockClassifierM arch ids a #

runBlockClassifier :: BlockClassifier arch ids -> BlockClassifierContext arch ids -> Classifier (ParsedContents arch ids) Source #

Run a classifier in a given block context

data BlockClassifierContext arch ids Source #

The fields of the BlockClassifierContext are:

ParseContext ...
The context for the parse
RegState ...
Initial register values
Seq (Stmt ...)
The statements in the block
AbsProcessorState ...
Abstract state of registers prior to terminator statement being executed.
Jmp.IntraJumpBounds ...
Bounds prior to terminator statement being executed.
ArchSegmentOff arch
Address of all segments written to memory
RegState ...
Final register values

Constructors

BlockClassifierContext 

Fields

Instances

Instances details
MonadReader (BlockClassifierContext arch ids) (BlockClassifierM arch ids) Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

ask :: BlockClassifierM arch ids (BlockClassifierContext arch ids) #

local :: (BlockClassifierContext arch ids -> BlockClassifierContext arch ids) -> BlockClassifierM arch ids a -> BlockClassifierM arch ids a #

reader :: (BlockClassifierContext arch ids -> a) -> BlockClassifierM arch ids a #

data Classifier o Source #

The result of block classification, which collects information about all of the match failures to help diagnose shortcomings in the analysis

Constructors

ClassifyFailed [ClassificationError] 
ClassifySucceeded [ClassificationError] o 

Instances

Instances details
MonadFail Classifier Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

fail :: String -> Classifier a #

Alternative Classifier Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Applicative Classifier Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

pure :: a -> Classifier a #

(<*>) :: Classifier (a -> b) -> Classifier a -> Classifier b #

liftA2 :: (a -> b -> c) -> Classifier a -> Classifier b -> Classifier c #

(*>) :: Classifier a -> Classifier b -> Classifier b #

(<*) :: Classifier a -> Classifier b -> Classifier a #

Functor Classifier Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

fmap :: (a -> b) -> Classifier a -> Classifier b #

(<$) :: a -> Classifier b -> Classifier a #

Monad Classifier Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

(>>=) :: Classifier a -> (a -> Classifier b) -> Classifier b #

(>>) :: Classifier a -> Classifier b -> Classifier b #

return :: a -> Classifier a #

classifierName :: String -> BlockClassifierM arch ids a -> BlockClassifierM arch ids a Source #

In the given context, set the name of the current classifier

This is used to improve the labels for each classifier failure

data ParseContext arch ids Source #

Information needed to parse the processor state

Constructors

ParseContext 

Fields

data NoReturnFunStatus Source #

Flags whether a function is labeled no return or not.

Constructors

NoReturnFun

Function labeled no return

MayReturnFun

Function may retun

Instances

Instances details
Show NoReturnFunStatus Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Pretty NoReturnFunStatus Source # 
Instance details

Defined in Data.Macaw.Architecture.Info

Methods

pretty :: NoReturnFunStatus -> Doc ann

prettyList :: [NoReturnFunStatus] -> Doc ann

Unclassified blocks

rewriteBlock :: ArchitectureInfo arch -> RewriteContext arch s src tgt -> Block arch src -> ST s (RewriteContext arch s src tgt, Block arch tgt) Source #

Apply optimizations to code in the block