| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Lang.Crucible.LLVM.MemModel.Strings
Description
Manipulating C-style null-terminated strings
Synopsis
- storeString :: forall sym bak (w :: Natural). (IsSymBackend sym bak, IsExpr (SymExpr sym), HasPtrWidth w, HasLLVMAnn sym, ?memOpts :: MemOptions) => bak -> MemImpl sym -> LLVMPtr sym w -> Vector (SymBV sym 8) -> IO (MemImpl sym)
- loadString :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> Maybe Int -> IO [Word8]
- loadMaybeString :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> Maybe Int -> IO (Maybe [Word8])
- loadConcretelyNullTerminatedString :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> Maybe Int -> IO [SymBV sym 8]
- loadProvablyNullTerminatedString :: forall sym bak scope (st :: Type -> Type) fs solver (wptr :: Natural). (IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> Maybe Int -> IO [SymBV sym 8]
- strLen :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions) => bak -> MemImpl sym -> LLVMPtr sym wptr -> IO (SymBV sym wptr)
- strnlen :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> SymBV sym wptr -> IO (SymBV sym wptr)
- strlenConcreteString :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> Maybe Int -> IO Int
- strlenConcretelyNullTerminatedString :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> Maybe Int -> IO (SymBV sym wptr)
- strlenProvablyNullTerminatedString :: forall sym bak (wptr :: Natural) scope (st :: Type -> Type) fs solver. (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver) => bak -> MemImpl sym -> LLVMPtr sym wptr -> Maybe Int -> IO (SymBV sym wptr)
- copyConcreteString :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> LLVMPtr sym wptr -> IO (MemImpl sym)
- copyConcretelyNullTerminatedString :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> LLVMPtr sym wptr -> Maybe Int -> IO (MemImpl sym)
- copyProvablyNullTerminatedString :: forall sym bak scope (st :: Type -> Type) fs solver (wptr :: Natural). (IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> LLVMPtr sym wptr -> Maybe Int -> IO (MemImpl sym)
- dupConcreteString :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> String -> Alignment -> IO (LLVMPtr sym wptr, MemImpl sym)
- dupConcretelyNullTerminatedString :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> Maybe Int -> String -> Alignment -> IO (LLVMPtr sym wptr, MemImpl sym)
- dupProvablyNullTerminatedString :: forall sym bak scope (st :: Type -> Type) fs solver (wptr :: Natural). (IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) => bak -> MemImpl sym -> LLVMPtr sym wptr -> Maybe Int -> String -> Alignment -> IO (LLVMPtr sym wptr, MemImpl sym)
- data ControlFlow a b
- newtype ByteChecker (m :: Type -> Type) sym bak a b = ByteChecker {
- runByteChecker :: bak -> a -> LLVMPtr sym 8 -> m (ControlFlow a b)
- withMaxChars :: (MonadIO m, HasCallStack, IsSymBackend sym bak, Functor m) => Int -> (a -> m b) -> ByteChecker m sym bak a b -> ByteChecker m sym bak (a, Int) b
- fullyConcreteNullTerminatedString :: forall (m :: Type -> Type) sym bak. (MonadIO m, HasCallStack, IsSymBackend sym bak) => ByteChecker m sym bak ([Word8] -> [Word8]) [Word8]
- concretelyNullTerminatedString :: forall (m :: Type -> Type) sym bak. (MonadIO m, HasCallStack, IsSymBackend sym bak) => ByteChecker m sym bak ([SymBV sym 8] -> [SymBV sym 8]) [SymBV sym 8]
- provablyNullTerminatedString :: forall (m :: Type -> Type) sym bak scope (st :: Type -> Type) fs solver. (MonadIO m, HasCallStack, IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver) => ByteChecker m sym bak ([SymBV sym 8] -> [SymBV sym 8]) [SymBV sym 8]
- fullyConcreteNullTerminatedStringLength :: forall (m :: Type -> Type) sym bak. (MonadIO m, HasCallStack, IsSymBackend sym bak) => ByteChecker m sym bak Int Int
- concretelyNullTerminatedStringLength :: forall (m :: Type -> Type) sym (wptr :: Natural) bak. (MonadIO m, MonadState (Pred sym) m, HasCallStack, HasPtrWidth wptr, IsSymBackend sym bak) => ByteChecker m sym bak (SymBV sym wptr) (SymBV sym wptr)
- provablyNullTerminatedStringLength :: forall (m :: Type -> Type) sym bak (wptr :: Natural) scope (st :: Type -> Type) fs solver. (MonadIO m, MonadState (Pred sym) m, HasCallStack, IsSymBackend sym bak, HasPtrWidth wptr, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver) => ByteChecker m sym bak (SymBV sym wptr) (SymBV sym wptr)
- newtype ByteLoader (m :: Type -> Type) sym bak (wptr :: Nat) = ByteLoader {
- runByteLoader :: bak -> LLVMPtr sym wptr -> m (LLVMPtr sym 8)
- llvmByteLoader :: forall sym bak (wptr :: Natural) (m :: Type -> Type). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack, MonadIO m) => MemImpl sym -> ByteLoader m sym bak wptr
- loadBytes :: forall m a b sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack, MonadIO m) => bak -> MemImpl sym -> a -> LLVMPtr sym wptr -> ByteLoader m sym bak wptr -> ByteChecker m sym bak a b -> m b
Documentation
Arguments
| :: forall sym bak (w :: Natural). (IsSymBackend sym bak, IsExpr (SymExpr sym), HasPtrWidth w, HasLLVMAnn sym, ?memOpts :: MemOptions) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym w | Pointer to write string to |
| -> Vector (SymBV sym 8) | The bytes of the string to write (null terminator not included) |
| -> IO (MemImpl sym) |
Store a string to memory, adding a null terminator at the end.
Loading strings
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | memory to read from |
| -> LLVMPtr sym wptr | pointer to string value |
| -> Maybe Int | maximum characters to read |
| -> IO [Word8] |
Load a null-terminated string from the memory.
The pointer to read from must be concrete and nonnull. Moreover,
we require all the characters in the string to be concrete.
Otherwise it is very difficult to tell when the string has
terminated. If a maximum number of characters is provided, no more
than that number of charcters will be read. In either case,
loadString will stop reading if it encounters a null-terminator.
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | memory to read from |
| -> LLVMPtr sym wptr | pointer to string value |
| -> Maybe Int | maximum characters to read |
| -> IO (Maybe [Word8]) |
Like loadString, except the pointer to load may be null. If
the pointer is null, we return Nothing. Otherwise we load
the string as with loadString and return it.
loadConcretelyNullTerminatedString Source #
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | |
| -> Maybe Int | Maximum number of characters to read |
| -> IO [SymBV sym 8] |
Load a null-terminated string (with a concrete null terminator) from memory.
The string must contain a concrete null terminator. If a maximum number of
characters is provided, no more than that number of characters will be read.
In either case, loadConcretelyNullTerminatedString will stop reading if it
encounters a (concretely) null terminator.
Note that the loaded string may actually be smaller than the returned list if any of the symbolic bytes are equal to 0.
loadProvablyNullTerminatedString Source #
Arguments
| :: forall sym bak scope (st :: Type -> Type) fs solver (wptr :: Natural). (IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | |
| -> Maybe Int | Maximum number of characters to read |
| -> IO [SymBV sym 8] |
Load a null-terminated string from memory.
Consults an SMT solver to check if any of the loaded bytes are known
to be null (0). If a maximum number of characters is provided, no
more than that number of charcters will be read. In either case,
loadProvablyNullTerminatedString will stop reading if it encounters a null
terminator.
Note that the loaded string may actually be smaller than the returned list if any of the symbolic bytes are equal to 0.
String length
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions) | |
| => bak | |
| -> MemImpl sym | memory to read from |
| -> LLVMPtr sym wptr | pointer to string value |
| -> IO (SymBV sym wptr) |
Compute the length of a null-terminated string.
The pointer to read from must be concrete and nonnull. The contents of the string may be symbolic; HOWEVER, this function will not terminate until it eventually reaches a concete null-terminator or a load error.
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | Pointer to null-terminated string |
| -> SymBV sym wptr | Size If this is not concrete, this will generate an assertion failure. |
| -> IO (SymBV sym wptr) |
Implementation of libc strnlen.
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | |
| -> Maybe Int | Maximum number of characters to read |
| -> IO Int |
strlen of a concrete string.
If any symbolic bytes are encountered, an assertion failure will be
generated. If a maximum number of characters is provided, no more than that
number of characters will be read. In either case, strlenConcreteString
will stop reading if it encounters a null terminator.
strlenConcretelyNullTerminatedString Source #
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | |
| -> Maybe Int | Maximum number of characters to read |
| -> IO (SymBV sym wptr) |
strlen of a null-terminated string (with a concrete null terminator).
The string must contain a concrete null terminator. If a maximum number of
characters is provided, no more than that number of characters will be read.
In either case, strlenConcretelyNullTerminatedString will stop reading if
it encounters a (concretely) null terminator.
This has the same behavior as strLen, except
that it supports a maximum length.
strlenProvablyNullTerminatedString Source #
Arguments
| :: forall sym bak (wptr :: Natural) scope (st :: Type -> Type) fs solver. (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | |
| -> Maybe Int | Maximum number of characters to read |
| -> IO (SymBV sym wptr) |
strlen of a provably null-terminated string.
Consults an SMT solver to check if any of the loaded bytes are known
to be null (0). If a maximum number of characters is provided, no
more than that number of charcters will be read. In either case,
strlenProvablyNullTerminatedString will stop reading if it encounters a
(provably) null terminator.
String copying
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | Destination pointer |
| -> LLVMPtr sym wptr | Source pointer |
| -> IO (MemImpl sym) |
strcpy of a concrete string.
Uses loadString to load the string, see that function for details.
Asserts that the regions are disjoint.
copyConcretelyNullTerminatedString Source #
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | Destination pointer |
| -> LLVMPtr sym wptr | Source pointer |
| -> Maybe Int | Maximum number of characters to read |
| -> IO (MemImpl sym) |
strcpy of a concretely null-terminated string.
Uses loadConcretelyNullTerminatedString to load the string, see that
function for details.
Asserts that the regions are disjoint.
copyProvablyNullTerminatedString Source #
Arguments
| :: forall sym bak scope (st :: Type -> Type) fs solver (wptr :: Natural). (IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | Destination pointer |
| -> LLVMPtr sym wptr | Source pointer |
| -> Maybe Int | Maximum number of characters to read |
| -> IO (MemImpl sym) |
strcpy of a concrete string.
Uses loadProvablyNullTerminatedString to load the string, see that
function for details.
Asserts that the regions are disjoint.
String duplication
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | Source pointer |
| -> String | Display string for allocation |
| -> Alignment | Alignment |
| -> IO (LLVMPtr sym wptr, MemImpl sym) |
strdup of a concrete string.
Uses loadString to load the string, see that function for details.
Allocates memory and copies the string to it, returning the new pointer.
dupConcretelyNullTerminatedString Source #
Arguments
| :: forall sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | Source pointer |
| -> Maybe Int | Maximum number of characters to read |
| -> String | Display string for allocation |
| -> Alignment | |
| -> IO (LLVMPtr sym wptr, MemImpl sym) |
strdup of a concretely null-terminated string.
Uses loadConcretelyNullTerminatedString to load the string, see that
function for details.
Allocates memory and copies the string to it, returning the new pointer.
dupProvablyNullTerminatedString Source #
Arguments
| :: forall sym bak scope (st :: Type -> Type) fs solver (wptr :: Natural). (IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack) | |
| => bak | |
| -> MemImpl sym | |
| -> LLVMPtr sym wptr | Source pointer |
| -> Maybe Int | Maximum number of characters to read |
| -> String | Display string for allocation |
| -> Alignment | |
| -> IO (LLVMPtr sym wptr, MemImpl sym) |
strdup of a provably null-terminated string.
Uses loadProvablyNullTerminatedString to load the string, see that
function for details.
Allocates memory and copies the string to it, returning the new pointer.
Low-level string loading primitives
ByteChecker
data ControlFlow a b Source #
Whether to stop or keep going
Like Rust's std::ops::ControlFlow.
Instances
| Bifunctor ControlFlow Source # | |
Defined in Lang.Crucible.LLVM.MemModel.Strings Methods bimap :: (a -> b) -> (c -> d) -> ControlFlow a c -> ControlFlow b d # first :: (a -> b) -> ControlFlow a c -> ControlFlow b c # second :: (b -> c) -> ControlFlow a b -> ControlFlow a c # | |
| Functor (ControlFlow a) Source # | |
Defined in Lang.Crucible.LLVM.MemModel.Strings Methods fmap :: (a0 -> b) -> ControlFlow a a0 -> ControlFlow a b # (<$) :: a0 -> ControlFlow a b -> ControlFlow a a0 # | |
newtype ByteChecker (m :: Type -> Type) sym bak a b Source #
Compute a result from a symbolic byte, and check if the load should continue to the next byte.
Used to:
- Check if the byte is concrete (
fullyConcreteNullTerminatedString) - Check if the byte is concretely a null terminator
(
concretelyNullTerminatedString) - Check if a byte is known by a solver to be a null terminator (
nullTerminatedString) - Check if we have surpassed a length limit (
withMaxChars)
Note that it is relatively common for a to be a function [b] -> [b]. This
is used to build up a snoc-list.
Constructors
| ByteChecker | |
Fields
| |
Arguments
| :: (MonadIO m, HasCallStack, IsSymBackend sym bak, Functor m) | |
| => Int | Maximum number of bytes to load |
| -> (a -> m b) | What to do when the maximum is reached |
| -> ByteChecker m sym bak a b | |
| -> ByteChecker m sym bak (a, Int) b |
ByteChecker for adding a maximum character length.
For loading strings
fullyConcreteNullTerminatedString :: forall (m :: Type -> Type) sym bak. (MonadIO m, HasCallStack, IsSymBackend sym bak) => ByteChecker m sym bak ([Word8] -> [Word8]) [Word8] Source #
ByteChecker for loading concrete strings.
Currently unused internally, but analogous with
loadString. In fact, it would be good to define
that function in terms of this one. However, this is blocked on TODO(#1406).
concretelyNullTerminatedString :: forall (m :: Type -> Type) sym bak. (MonadIO m, HasCallStack, IsSymBackend sym bak) => ByteChecker m sym bak ([SymBV sym 8] -> [SymBV sym 8]) [SymBV sym 8] Source #
ByteChecker for loading symbolic strings with a concrete null terminator.
Used in loadConcretelyNullTerminatedString.
provablyNullTerminatedString :: forall (m :: Type -> Type) sym bak scope (st :: Type -> Type) fs solver. (MonadIO m, HasCallStack, IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver) => ByteChecker m sym bak ([SymBV sym 8] -> [SymBV sym 8]) [SymBV sym 8] Source #
ByteChecker for loading symbolic strings with a provably-null terminator.
Used in loadSymbolicString.
For string length
fullyConcreteNullTerminatedStringLength :: forall (m :: Type -> Type) sym bak. (MonadIO m, HasCallStack, IsSymBackend sym bak) => ByteChecker m sym bak Int Int Source #
ByteChecker for strlen of concrete strings.
concretelyNullTerminatedStringLength :: forall (m :: Type -> Type) sym (wptr :: Natural) bak. (MonadIO m, MonadState (Pred sym) m, HasCallStack, HasPtrWidth wptr, IsSymBackend sym bak) => ByteChecker m sym bak (SymBV sym wptr) (SymBV sym wptr) Source #
ByteChecker for strlen of strings with a concrete null terminator.
provablyNullTerminatedStringLength :: forall (m :: Type -> Type) sym bak (wptr :: Natural) scope (st :: Type -> Type) fs solver. (MonadIO m, MonadState (Pred sym) m, HasCallStack, IsSymBackend sym bak, HasPtrWidth wptr, sym ~ ExprBuilder scope st fs, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver) => ByteChecker m sym bak (SymBV sym wptr) (SymBV sym wptr) Source #
ByteChecker for strlen for strings with a provably-null terminator.
ByteLoader
newtype ByteLoader (m :: Type -> Type) sym bak (wptr :: Nat) Source #
Load a byte from memory.
The only ByteLoader defined here is llvmByteLoader, but Macaw users will
most often want one based on doReadMemModel.
Constructors
| ByteLoader | |
Fields
| |
llvmByteLoader :: forall sym bak (wptr :: Natural) (m :: Type -> Type). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack, MonadIO m) => MemImpl sym -> ByteLoader m sym bak wptr Source #
A ByteLoader for LLVM memory based on doLoad.
loadBytes
Arguments
| :: forall m a b sym bak (wptr :: Natural). (IsSymBackend sym bak, HasPtrWidth wptr, HasLLVMAnn sym, ?memOpts :: MemOptions, HasCallStack, MonadIO m) | |
| => bak | |
| -> MemImpl sym | |
| -> a | Initial accumulator |
| -> LLVMPtr sym wptr | Pointer to load from |
| -> ByteLoader m sym bak wptr | How to load a byte from memory |
| -> ByteChecker m sym bak a b | How to check if we should continue loading the next byte |
| -> m b |
Load a sequence of bytes, one at a time.
Used to implement loadConcretelyNullTerminatedString and
loadSymbolicString. Highly customizable via ByteLoader and ByteChecker.