private string ToString_Constants(Model model) { ISet <string> program = new SortedSet <string>(); foreach (KeyValuePair <string, BitVecExpr> pair in this._constants) { BitVecExpr constant = pair.Value; program.Add(pair.Key + " = " + ToolsZ3.ToStringBin(ToolsZ3.GetTvArray(constant, 64, this._solver, this._ctx))); } foreach (Rn reg in new List <Rn>() { Rn.RAX }) //, Rn.RBX, Rn.RCX, Rn.RDX}) { for (int lineNumber = 0; lineNumber <= this._nLines; ++lineNumber) { BitVecExpr regValue = GetReg(reg, lineNumber, this._ctx); program.Add(regValue.FuncDecl.Name + " = " + ToolsZ3.ToStringBin(ToolsZ3.GetTvArray(regValue, 64, this._solver, this._ctx))); } } StringBuilder sb = new StringBuilder(); sb.AppendLine("Constants:"); foreach (string s in program) { sb.AppendLine(s); } return(sb.ToString()); }
private string Solver2Asm(Solver solver, Context ctx) { StringBuilder sb = new StringBuilder(); sb.AppendLine("\nAsm:"); for (int lineNumber = 1; lineNumber <= this._nLines; ++lineNumber) { string codeLine = ""; foreach (BoolExpr instruction_Switch in this._switches[lineNumber]) { Tv tv = ToolsZ3.GetTv(instruction_Switch, solver, ctx); if (false) { if (solver.Check() == Status.SATISFIABLE) { Console.WriteLine(instruction_Switch + " = " + tv); Console.WriteLine(ToString(solver.Model)); } } if (tv == Tv.ONE) { codeLine = instruction_Switch.FuncDecl.Name.ToString(); break; } else if (tv == Tv.UNKNOWN) { codeLine = instruction_Switch.FuncDecl.Name + " | " + codeLine; } } sb.AppendLine(codeLine); } if (false) { foreach (KeyValuePair <string, BitVecExpr> pair in this._constants) { BitVecExpr constant = pair.Value; sb.AppendLine(pair.Key + " = " + ToolsZ3.ToStringBin(ToolsZ3.GetTvArray(constant, 64, this._solver, this._ctx))); } foreach (Rn reg in new List <Rn>() { Rn.RAX }) //, Rn.RBX, Rn.RCX, Rn.RDX}) { for (int lineNumber = 0; lineNumber <= this._nLines; ++lineNumber) { BitVecExpr regValue = GetReg(reg, lineNumber, ctx); sb.AppendLine(regValue.FuncDecl.Name + " = " + ToolsZ3.ToStringBin(ToolsZ3.GetTvArray(regValue, 64, this._solver, this._ctx))); } } } return(sb.ToString()); }
private string ToString(Rn name, State state) { Tv[] array = state.GetTv5Array(name); var tup = ToolsZ3.HasOneValue(array); if (tup.hasOneValue) { return(ToolsZ3.ToStringBin(tup.value) + ""); } else { return(ToolsZ3.ToStringBin(array)); } }
public string ToStringRegs(string identStr) { StringBuilder sb = new StringBuilder(); foreach (Rn reg in this.Tools.StateConfig.GetRegOn()) { Tv[] regContent = this.GetTvArray(reg); var(hasOneValue, value) = ToolsZ3.HasOneValue(regContent); bool showReg = !(hasOneValue && value == Tv.UNKNOWN); if (showReg) { sb.Append("\n" + identStr + string.Format(reg + " = {0} = {1}", ToolsZ3.ToStringBin(regContent), ToolsZ3.ToStringHex(regContent))); } } return(sb.ToString()); }
public string ToStringFlags(string identStr) { StringBuilder sb = new StringBuilder(); foreach (Flags flag in new Flags[] { Flags.CF, Flags.ZF, Flags.PF, Flags.OF, Flags.SF, Flags.AF, Flags.DF }) { char c = ' '; if (this.Tools.StateConfig.IsFlagOn(flag)) { c = ToolsZ3.ToStringBin(this.GetTv(flag)); } sb.Append(flag.ToString() + "=" + c + "; "); } sb.AppendLine(""); return(sb.ToString()); }
public static string ToStringBin(Tv[] a) { StringBuilder sb = new StringBuilder("0b"); if (a == null) { sb.Append("null"); } else { int nBits = a.Length; for (int i = (nBits - 1); i >= 0; --i) { sb.Append(ToolsZ3.ToStringBin(a[i])); if ((i > 0) && (i != nBits - 1) && (i % 8 == 0)) { sb.Append('_'); } } } return(sb.ToString()); }
private string ToString(Flags flag, State state) { char c = ToolsZ3.ToStringBin(state.GetTv5(flag)); return(c + ""); }