private void createFunctionButton_Click(object sender, EventArgs e) { var info = GetSelectedInfo(); if (info == null) { return; } var disassembler = new Disassembler(process.CoreFunctions); var functionStartAddress = disassembler.RemoteGetFunctionStartAddress(process, info.DebugInfo.ExceptionAddress); if (functionStartAddress.IsNull()) { MessageBox.Show("Could not find the start of the function. Aborting.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } var node = LinkedWindowFeatures.CreateClassAtAddress(functionStartAddress, false); node.AddNode(new FunctionNode { Comment = info.Instructions[2].Instruction }); }
private void showCodeOfClassToolStripMenuItem_Click(object sender, EventArgs e) { if (memoryViewControl.GetSelectedNodes().FirstOrDefault()?.Node is ClassNode node) { LinkedWindowFeatures.ShowCodeGeneratorForm(node.Yield(), CurrentProject.TypeMapping); } }
private void FindWhatInteractsWithSelectedNode(bool writeOnly) { var selectedNode = memoryViewControl.GetSelectedNodes().FirstOrDefault(); if (selectedNode == null) { return; } LinkedWindowFeatures.FindWhatInteractsWithAddress(selectedNode.Address, selectedNode.Node.MemorySize, writeOnly); }
private void showCodeOfClassToolStripMenuItem2_Click(object sender, EventArgs e) { var classNode = classesView.SelectedClass; if (classNode == null) { return; } LinkedWindowFeatures.ShowCodeGeneratorForm(classNode.Yield(), CurrentProject.TypeMapping); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); GlobalWindowManager.AddWindow(this); pluginManager.LoadAllPlugins(Path.Combine(Application.StartupPath, Constants.PluginsFolder), Program.Logger); toolStrip.Items.AddRange(NodeTypesBuilder.CreateToolStripButtons(ReplaceSelectedNodesWithType).ToArray()); changeTypeToolStripMenuItem.DropDownItems.AddRange(NodeTypesBuilder.CreateToolStripMenuItems(ReplaceSelectedNodesWithType, false).ToArray()); var createDefaultProject = true; if (Program.CommandLineArgs.FileName != null) { try { LoadProjectFromPath(Program.CommandLineArgs.FileName); createDefaultProject = false; } catch (Exception ex) { Program.Logger.Log(ex); } } if (createDefaultProject) { SetProject(new ReClassNetProject()); LinkedWindowFeatures.CreateDefaultClass(); } if (Program.CommandLineArgs[Constants.CommandLineOptions.AttachTo] != null) { AttachToProcess(Program.CommandLineArgs[Constants.CommandLineOptions.AttachTo]); } }
/// <summary> /// Attaches the debugger to find what interacts with the selected record. /// </summary> /// <exception cref="ArgumentOutOfRangeException">Thrown when one or more arguments are outside the required range.</exception> /// <param name="record">The record.</param> /// <param name="writeOnly">True to search only for write access.</param> private static void FindWhatInteractsWithSelectedRecord(MemoryRecord record, bool writeOnly) { int size; switch (record.ValueType) { case ScanValueType.Byte: size = 1; break; case ScanValueType.Short: size = 2; break; case ScanValueType.Integer: case ScanValueType.Float: size = 4; break; case ScanValueType.Long: case ScanValueType.Double: size = 8; break; case ScanValueType.ArrayOfBytes: size = record.ValueLength; break; case ScanValueType.String: size = record.ValueLength; break; default: throw new ArgumentOutOfRangeException(); } LinkedWindowFeatures.FindWhatInteractsWithAddress(record.RealAddress, size, writeOnly); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); GlobalWindowManager.AddWindow(this); pluginManager.LoadAllPlugins(Path.Combine(Application.StartupPath, Constants.PluginsFolder), Program.Logger); var createDefaultProject = true; if (Program.CommandLineArgs.FileName != null) { try { LoadProjectFromPath(Program.CommandLineArgs.FileName); createDefaultProject = false; } catch (Exception ex) { Program.Logger.Log(ex); } } if (createDefaultProject) { SetProject(new ReClassNetProject()); LinkedWindowFeatures.CreateDefaultClass(); } if (Program.CommandLineArgs[Constants.CommandLineOptions.AttachTo] != null) { AttachToProcess(Program.CommandLineArgs[Constants.CommandLineOptions.AttachTo]); } }
private void searchForEqualValuesToolStripMenuItem_Click(object sender, EventArgs e) { var selectedNode = memoryViewControl.GetSelectedNodes().FirstOrDefault(); if (selectedNode == null) { return; } IScanComparer comparer; switch (selectedNode.Node) { case BaseHexNode node: comparer = new ArrayOfBytesMemoryComparer(node.ReadValueFromMemory(selectedNode.Memory)); break; case FloatNode node: comparer = new FloatMemoryComparer(ScanCompareType.Equal, ScanRoundMode.Normal, 2, node.ReadValueFromMemory(selectedNode.Memory), 0); break; case DoubleNode node: comparer = new DoubleMemoryComparer(ScanCompareType.Equal, ScanRoundMode.Normal, 2, node.ReadValueFromMemory(selectedNode.Memory), 0); break; case Int8Node node: comparer = new ByteMemoryComparer(ScanCompareType.Equal, (byte)node.ReadValueFromMemory(selectedNode.Memory), 0); break; case UInt8Node node: comparer = new ByteMemoryComparer(ScanCompareType.Equal, node.ReadValueFromMemory(selectedNode.Memory), 0); break; case Int16Node node: comparer = new ShortMemoryComparer(ScanCompareType.Equal, node.ReadValueFromMemory(selectedNode.Memory), 0); break; case UInt16Node node: comparer = new ShortMemoryComparer(ScanCompareType.Equal, (short)node.ReadValueFromMemory(selectedNode.Memory), 0); break; case Int32Node node: comparer = new IntegerMemoryComparer(ScanCompareType.Equal, node.ReadValueFromMemory(selectedNode.Memory), 0); break; case UInt32Node node: comparer = new IntegerMemoryComparer(ScanCompareType.Equal, (int)node.ReadValueFromMemory(selectedNode.Memory), 0); break; case Int64Node node: comparer = new LongMemoryComparer(ScanCompareType.Equal, node.ReadValueFromMemory(selectedNode.Memory), 0); break; case UInt64Node node: comparer = new LongMemoryComparer(ScanCompareType.Equal, (long)node.ReadValueFromMemory(selectedNode.Memory), 0); break; case Utf8TextNode node: comparer = new StringMemoryComparer(node.ReadValueFromMemory(selectedNode.Memory), Encoding.UTF8, true); break; case Utf16TextNode node: comparer = new StringMemoryComparer(node.ReadValueFromMemory(selectedNode.Memory), Encoding.Unicode, true); break; case Utf32TextNode node: comparer = new StringMemoryComparer(node.ReadValueFromMemory(selectedNode.Memory), Encoding.UTF32, true); break; default: return; } LinkedWindowFeatures.StartMemoryScan(comparer); }
private void newClassToolStripButton_Click(object sender, EventArgs e) { LinkedWindowFeatures.CreateDefaultClass(); }
/// <summary>Shows the code form with the given <paramref name="generator"/>.</summary> /// <param name="generator">The generator.</param> private void ShowCodeForm(ICodeGenerator generator) { Contract.Requires(generator != null); LinkedWindowFeatures.ShowCodeGeneratorForm(currentProject.Classes, generator); }
private void createClassAtAddressToolStripMenuItem_Click(object sender, EventArgs e) { LinkedWindowFeatures.CreateClassAtAddress(GetMemoryRecordListFromMenuItem(sender).SelectedRecord.RealAddress, true); }
private void setCurrentClassAddressToolStripMenuItem_Click(object sender, EventArgs e) { LinkedWindowFeatures.SetCurrentClassAddress(GetMemoryRecordListFromMenuItem(sender).SelectedRecord.RealAddress); }
private void createClassAtAddressToolStripMenuItem_Click(object sender, EventArgs e) { LinkedWindowFeatures.CreateClassAtAddress(GetSelectedAddress(sender), true); }
private void setCurrentClassAddressToolStripMenuItem_Click(object sender, EventArgs e) { LinkedWindowFeatures.SetCurrentClassAddress(GetSelectedAddress(sender)); }
private void addNewClassToolStripMenuItem_Click(object sender, EventArgs e) { LinkedWindowFeatures.CreateDefaultClass(); }