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; }
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); }