macaw/symbolic
Your Name d470abe976 symbolic: Remove support for stack-spilled arguments
Many ABIs impose some kind of alignment constraints on the stack
pointer. For example, both the AArch32 and x86_64 SysV ABIs specify
that the end of the spilled argument list is aligned to 2*w where w
is the number of bytes in a word. Since macaw-symbolic has no notion
of the ABI in use, its ABI-agnostic code could only ever satisfy such
alignment constraints accidentally. Clients wishing to spill arguments
to the stack should do so with ABI-specific functionality.
2024-09-24 10:09:55 -04:00
..
examples Add optional override for MacawArchStmtExtensions to genArchVals (#230) 2021-09-14 18:24:47 -07:00
src/Data/Macaw symbolic: Remove support for stack-spilled arguments 2024-09-24 10:09:55 -04:00
test This commit re-implements the memory model used by macaw symbolic 2020-02-11 09:58:53 -08:00
.hlint.yaml symbolic: Remove redundant unwrapping/rewrapping of register struct 2024-09-11 16:26:10 -07:00
ChangeLog.md macaw-symbolic: Note lazy memory model in the changelog 2023-03-14 13:27:07 -04:00
LICENSE Update license information. 2017-09-27 15:59:06 -07:00
macaw-symbolic.cabal symbolic: Factor stack setup out of Testing into its own module 2024-09-03 15:35:08 -04:00
README.org Clean up and document the macaw-symbolic API 2019-01-10 18:20:54 -08:00

Overview

The macaw-symbolic library provides a mechanism for translating machine code functions discovered by macaw into Crucible CFGs that can then be symbolically simulated.

The core macaw-symbolic library supports translating generic macaw into crucible, but is not a standalone library. To translate actual machine code, an architecture-specific backend is required. For example, macaw-x86-symbolic can be used to translate x86_64 binaries into crucible. Examples for using macaw-symbolic (and architecture-specific backends) are available in Data.Macaw.Symbolic.

In order to avoid API bloat, the definitions required to implement a new architecture-specific backend are exported through the Data.Macaw.Symbolic.Backend module.

An additional module, Data.Macaw.Symbolic.Memory, provides an example of how to handle memory address translation in the simulator for machine code programs. There are other possible ways to translate memory addresses, but this module provides a versatile example that can serve many common use cases.