public override void Execute(string text) { base.Execute(text); char[] sp = { ' ', '\t' }; var argv = text.Split(sp, 3, StringSplitOptions.RemoveEmptyEntries); if (argv.Length != 3) { Context.CONSOLE.Write(CommandHelp); return; } var strArgDst = argv[0]; var strArgSize = argv[2]; var strArgVal = argv[1]; var varArgDst = Context.IDE.Debugger.GetExpression(strArgDst, false, 100); var varArgVal = Context.IDE.Debugger.GetExpression(strArgVal, false, 100); var varArgSize = Context.IDE.Debugger.GetExpression(strArgSize, false, 100); var processId = Context.IDE.Debugger.CurrentProcess.ProcessID; if (!varArgDst.IsValidValue) { Context.CONSOLE.Write("Argument <address>: " + strArgDst + " is invalid!"); return; } if (!varArgVal.IsValidValue) { Context.CONSOLE.Write("Argument <val>: " + strArgVal + " is invalid!"); return; } if (!varArgSize.IsValidValue) { Context.CONSOLE.Write("Argument <size>: " + strArgSize + " is invalid!"); return; } long byteval = 0; long dstAddress = 0; long dataSize = 0; var numStyleSrc = NumberHelpers.IsHexNumber(varArgVal.Value) ? NumberStyles.HexNumber : NumberStyles.Integer; var numStyleDst = NumberHelpers.IsHexNumber(varArgDst.Value) ? NumberStyles.HexNumber : NumberStyles.Integer; var numStyleSize = NumberHelpers.IsHexNumber(varArgSize.Value) ? NumberStyles.HexNumber : NumberStyles.Integer; var bRet = true; bRet = bRet && NumberHelpers.TryParseLong(varArgDst.Value, numStyleDst, out dstAddress); bRet = bRet && NumberHelpers.TryParseLong(varArgVal.Value, numStyleSrc, out byteval); bRet = bRet && NumberHelpers.TryParseLong(varArgSize.Value, numStyleSize, out dataSize); if (!bRet) { Context.CONSOLE.Write("Failed to evaluate command arguments!"); return; } var ntdbgStatus = NativeMethods.NtdbgOk; if (NativeMethods.NtdbgOk != (ntdbgStatus = MemoryHelpers.ProcMemset(processId, dstAddress, (byte)byteval, dataSize))) { Context.CONSOLE.Write("Memory set dst:" + NumberHelpers.ToHex(dstAddress) + " " + (byte)byteval + " " + dataSize + " failed!"); Context.CONSOLE.Write("Error code:" + ntdbgStatus + " - " + NativeMethods.GetStatusString(ntdbgStatus) + "."); return; } Context.CONSOLE.Write("Wrote: " + dataSize + " bytes to address: " + NumberHelpers.ToHex(dstAddress)); }
public override void Execute(string[] args) { base.Execute(args); if (args.Length != 3) { Context.CONSOLE.Write(CommandHelp); return; } var strArgDst = args[0]; var strArgVal = args[1]; var strArgSize = args[2]; var varArgDst = Context.IDE.Debugger.GetExpression(strArgDst, false, 100); var varArgVal = Context.IDE.Debugger.GetExpression(strArgVal, false, 100); var varArgSize = Context.IDE.Debugger.GetExpression(strArgSize, false, 100); if (!varArgDst.IsValidValue) { Context.CONSOLE.Write("Argument <address>: " + strArgDst + " is invalid!"); return; } if (!varArgVal.IsValidValue) { Context.CONSOLE.Write("Argument <val>: " + strArgVal + " is invalid!"); return; } if (!varArgSize.IsValidValue) { Context.CONSOLE.Write("Argument <size>: " + strArgSize + " is invalid!"); return; } long byteval = 0; long dstAddress = 0; long dataSize = 0; var numStyleSrc = NumberHelpers.IsHexNumber(varArgVal.Value) ? NumberStyles.HexNumber : NumberStyles.Integer; var numStyleDst = NumberHelpers.IsHexNumber(varArgDst.Value) ? NumberStyles.HexNumber : NumberStyles.Integer; var numStyleSize = NumberHelpers.IsHexNumber(varArgSize.Value) ? NumberStyles.HexNumber : NumberStyles.Integer; var bRet = true; bRet = bRet && NumberHelpers.TryParseLong(varArgDst.Value, numStyleDst, out dstAddress); bRet = bRet && NumberHelpers.TryParseLong(varArgVal.Value, numStyleSrc, out byteval); bRet = bRet && NumberHelpers.TryParseLong(varArgSize.Value, numStyleSize, out dataSize); if (!bRet) { Context.CONSOLE.Write("Failed to evaluate command arguments!"); return; } if (!MemoryHelpers.ProcMemset( Context.IDE.Debugger.CurrentStackFrame, dstAddress, (byte)byteval, dataSize )) { Context.CONSOLE.Write("Memory set dst:" + NumberHelpers.ToHex(dstAddress) + " " + (byte)byteval + " " + dataSize + " failed!"); return; } Context.CONSOLE.Write("Wrote: " + dataSize + " bytes to address: " + NumberHelpers.ToHex(dstAddress)); }