Skip to content

Commit b7a3bdd

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents f937e97 + 231bedf commit b7a3bdd

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
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};
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> {

src/synthesis/builder.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,11 @@ pub struct SynthesisParams {
4545
pub candidates_per_slot: usize,
4646
pub parallel: usize,
4747
pub instructions: Vec<Instruction>,
48+
#[builder(default)]
4849
pub preconditions: Vec<Arc<StateConstraintGenerator>>,
50+
#[builder(default)]
4951
pub postconditions: Vec<Arc<StateConstraintGenerator>>,
52+
#[builder(default)]
5053
pub pointer_invariants: Vec<Arc<TransitionConstraintGenerator>>,
5154
}
5255

src/synthesis/pcode_theory/pcode_assignment.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ impl<'ctx> PcodeAssignment<'ctx> {
3939
solver: &Solver<'ctx>,
4040
) -> Result<AssignmentModel<'ctx, ModeledBlock<'ctx>>, CrackersError> {
4141
solver.assert(&assert_concat(jingle.z3, &self.spec_trace)?);
42+
solver.assert(&assert_concat(jingle.z3, &self.eval_trace)?);
4243
for x in self.eval_trace.windows(2) {
43-
solver.assert(&x[0].assert_concat(&x[1])?);
4444
solver.assert(&x[0].can_branch_to_address(x[1].get_address())?);
4545
}
4646
for (spec_inst, trace_inst) in self.spec_trace.iter().zip(&self.eval_trace) {

0 commit comments

Comments
 (0)