-
Notifications
You must be signed in to change notification settings - Fork 473
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Smarter state serialization #225
Comments
That's a super clever approach! |
Worth revisiting after #1093. |
@pgoodman howdy, on line 31 there's a function signature like def null_transition():
pass ??? |
def null_transition(state):
return state That file is here: https://gist.github.com/pgoodman/f1eb082936d433d32c65a2596bce7c12 |
I think Manticore should take the FrankenPSE approach to saving states, it's much more disk friendly.
Suppose you get a symbolic
EIP
, and there's 10 possible concretizations for it. In FrankenPSE, I'd serialize a pre-fork state file, make 10 post-fork hardlinks to it, delete the pre-fork state file, then in memory store the assertion condition to go from a pre-fork to a post-fork state.It ended up drastically reducing required disk space, and required I/O at each fork and also benefits from more reuse in the kernel's page cache. So you'd have 10 names for identical files sharing the same underlying data in the kernel's page cache / on disk, and in memory, where you already need to maintain the list of states, you have these little closures that can assert a simple condition, e.g. assert that cpu.EIP == 0xf00, storing these in such a way that they don't hold references to the state/cpu/etc objects.
Here's the relevant code, copypasta'd from FrankenPSE. I don't have time to adapt it to Manticore, someone else might ;-)
The text was updated successfully, but these errors were encountered: