public MemPrintPanel(NativeParaItem paraItem)
        {
            InitializeComponent();
            this.paraItem          = paraItem;
            this.paraItem.MemLen   = (UInt32)memLengthBox.Value;
            this.paraItem.Mem64Len = (UInt32)mem64LengthBox.Value;

            this.memLengthBox.ValueChanged   += MemLengthBox_ValueChanged;
            this.mem64LengthBox.ValueChanged += Mem64LengthBox_ValueChanged;
        }
Beispiel #2
0
        public static string GenNativeCode(string modelName, string address, List <Object> checkedItems, int workId)
        {
            string reStr = "";

            string soTemplate = "\nvar baseAddr = Module.findBaseAddress('{0}');\n"
                                + "console.log(baseAddr)\n"
                                + "var luaL_loadbuffer = baseAddr.add({1});\n"
                                + "\n"
                                + "Interceptor.attach(luaL_loadbuffer,{{\n"
                                + "\tonEnter:function(args){{\n"
                                + "       try{{\n"
                                + "\t\t\t{2} \n"
                                + "\t\t\t{3} \n"
                                + "\t\t\t{6} \n"
                                + "        }}catch(e){{\n"
                                + "            console.log(e);\n"
                                + "        }}\n"
                                + "\t}},\n"
                                + "\tonLeave:function(retval){{\n"
                                + "       try{{\n"
                                + "            {4} \n"
                                + "            {5} \n"
                                + "       }}catch(e){{\n"
                                + "            console.log(e);\n"
                                + "       }}\n"
                                + "\t}}\n"
                                + "}});";

            soTemplate = soTemplate.Replace("baseAddr", "baseAddr_" + workId);
            soTemplate = soTemplate.Replace("luaL_loadbuffer", "luaL_loadbuffer_" + workId);

            string paramStr  = "";
            string stackInfo = "";

            if (((NativeParaItem)checkedItems[0]).ValuePrint)
            {
                stackInfo = "console.log('Backtrace:\t' + Thread.backtrace(this.context,Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join(''));";
            }

            string ret = "";

            if (((NativeParaItem)checkedItems[1]).ValuePrint)
            {
                ret = "console.log('函数执行结果:' + retval);";
            }

            string outsetVar = "";
            string leavePara = "";

            for (int i = 2; i < checkedItems.Count; i++)
            {
                NativeParaItem item = (NativeParaItem)checkedItems[i];
                if (item == null || !item.ValuePrint)
                {
                    continue;
                }

                string s = "\n\t\t\t" + "console.log('参数打印 param{0}:', args[{0}]);\n";
                if (paramStr != "")
                {
                    s = "\t\t\t" + s;
                }
                paramStr += string.Format(s, i - 2);
                if (item.MemPrint)
                {
                    string arg = "this.a" + workId + "_" + (i - 2);
                    s = arg + " = args[" + (i - 2) + "];\n";
                    if (outsetVar != "")
                    {
                        s = "\t\t\t" + s;
                    }
                    outsetVar += s;

                    s         = "\t\t\t" + "console.log(Memory.readByteArray(args[{0}],{1}));\n";
                    paramStr += string.Format(s, i - 2, item.MemLen);

                    s = "\n\t\t\t" + "console.log({0});\n"
                        + "\t\t\t" + "console.log(Memory.readByteArray({0}, {1}));\n";
                    if (leavePara != "")
                    {
                        s = "\t\t\t" + s;
                    }
                    leavePara += string.Format(s, arg, item.MemLen);
                }
                if (item.MemU64Print)
                {
                    s = "\t\t\t" + "var p{0} = ptr(ptr(parseInt(args[{0}])).readU64());\n"
                        + "\t\t\t" + "console.log(Memory.readByteArray(p{0}, {1})); \n";
                    paramStr += string.Format(s, i - 2, item.Mem64Len);
                }
            }
            reStr = string.Format(soTemplate, modelName, address, stackInfo, paramStr, ret, leavePara, outsetVar);

            return(reStr);
        }