Skip to content

Commit 05db07b

Browse files
committed
Something that works
1 parent c7891e2 commit 05db07b

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

src/synthesis/assignment_model.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::fmt::{Display, Formatter};
22

33
use jingle::modeling::{ModelingContext, State};
4-
use jingle::sleigh::GeneralizedVarNode;
4+
use jingle::sleigh::{GeneralizedVarNode, RegisterManager, VarNode};
55
use jingle::varnode::ResolvedVarnode;
66
use z3::ast::BV;
77
use z3::Model;
@@ -40,6 +40,22 @@ impl<'ctx, T: ModelingContext<'ctx>> AssignmentModel<'ctx, T> {
4040
pub fn read_resolved(&'ctx self, vn: &ResolvedVarnode<'ctx>) -> Option<BV<'ctx>> {
4141
self.final_state().and_then(|f| f.read_resolved(vn).ok())
4242
}
43+
44+
pub fn print_trace_of_reg(&'ctx self, reg: &str) {
45+
let r = self.final_state().unwrap().get_register(reg).unwrap();
46+
for gadget in &self.gadgets {
47+
let val = gadget.get_original_state().read_varnode(&r).unwrap();
48+
println!("{} Before: {:?}",reg, self.model.eval(&val, false));
49+
let val = gadget.get_final_state().read_varnode(&r).unwrap();
50+
println!("{} After: {:?}",reg, self.model.eval(&val, false));
51+
}
52+
}
53+
54+
pub fn initial_reg(&'ctx self, reg: &str) -> Option<BV<'ctx>> {
55+
let r = self.final_state().unwrap().get_register(reg).unwrap();
56+
let val = self.gadgets[0].get_original_state().read_varnode(&r).unwrap();
57+
self.model.eval(&val, false)
58+
}
4359
}
4460

4561
impl<'ctx, T: ModelingContext<'ctx> + Display> Display for AssignmentModel<'ctx, T> {

0 commit comments

Comments
 (0)