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
            });
        }
Пример #2
0
 private void showCodeOfClassToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (memoryViewControl.GetSelectedNodes().FirstOrDefault()?.Node is ClassNode node)
     {
         LinkedWindowFeatures.ShowCodeGeneratorForm(node.Yield(), CurrentProject.TypeMapping);
     }
 }
Пример #3
0
        private void FindWhatInteractsWithSelectedNode(bool writeOnly)
        {
            var selectedNode = memoryViewControl.GetSelectedNodes().FirstOrDefault();

            if (selectedNode == null)
            {
                return;
            }

            LinkedWindowFeatures.FindWhatInteractsWithAddress(selectedNode.Address, selectedNode.Node.MemorySize, writeOnly);
        }
Пример #4
0
        private void showCodeOfClassToolStripMenuItem2_Click(object sender, EventArgs e)
        {
            var classNode = classesView.SelectedClass;

            if (classNode == null)
            {
                return;
            }

            LinkedWindowFeatures.ShowCodeGeneratorForm(classNode.Yield(), CurrentProject.TypeMapping);
        }
Пример #5
0
        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]);
            }
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        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]);
            }
        }
Пример #8
0
        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);
        }
Пример #9
0
 private void newClassToolStripButton_Click(object sender, EventArgs e)
 {
     LinkedWindowFeatures.CreateDefaultClass();
 }
Пример #10
0
        /// <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);
        }
Пример #11
0
 private void createClassAtAddressToolStripMenuItem_Click(object sender, EventArgs e)
 {
     LinkedWindowFeatures.CreateClassAtAddress(GetMemoryRecordListFromMenuItem(sender).SelectedRecord.RealAddress, true);
 }
Пример #12
0
 private void setCurrentClassAddressToolStripMenuItem_Click(object sender, EventArgs e)
 {
     LinkedWindowFeatures.SetCurrentClassAddress(GetMemoryRecordListFromMenuItem(sender).SelectedRecord.RealAddress);
 }
Пример #13
0
 private void createClassAtAddressToolStripMenuItem_Click(object sender, EventArgs e)
 {
     LinkedWindowFeatures.CreateClassAtAddress(GetSelectedAddress(sender), true);
 }
Пример #14
0
 private void setCurrentClassAddressToolStripMenuItem_Click(object sender, EventArgs e)
 {
     LinkedWindowFeatures.SetCurrentClassAddress(GetSelectedAddress(sender));
 }
Пример #15
0
 private void addNewClassToolStripMenuItem_Click(object sender, EventArgs e)
 {
     LinkedWindowFeatures.CreateDefaultClass();
 }