Example #1
0
        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());
        }
Example #2
0
        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());
        }
Example #3
0
        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));
            }
        }
Example #4
0
        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());
        }
Example #5
0
        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());
        }
Example #6
0
        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());
        }
Example #7
0
        private string ToString(Flags flag, State state)
        {
            char c = ToolsZ3.ToStringBin(state.GetTv5(flag));

            return(c + "");
        }