diff --git a/.gitignore b/.gitignore index 3c4efe2..9f2a7dd 100644 --- a/.gitignore +++ b/.gitignore @@ -258,4 +258,5 @@ paket-files/ # Python Tools for Visual Studio (PTVS) __pycache__/ -*.pyc \ No newline at end of file +*.pyc +*.csproj diff --git a/OrbisDbgUI/Forms/MemoryForm.Designer.cs b/OrbisDbgUI/Forms/MemoryForm.Designer.cs index f31b86e..5bfca04 100644 --- a/OrbisDbgUI/Forms/MemoryForm.Designer.cs +++ b/OrbisDbgUI/Forms/MemoryForm.Designer.cs @@ -36,6 +36,9 @@ private void InitializeComponent() { this.FullBytesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this.copySelectedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyAsUInt64ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyAsUInt32ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyAsUInt16ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.MemoryToolStrip = new System.Windows.Forms.ToolStrip(); this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel(); this.AddressToolStripTextBox = new System.Windows.Forms.ToolStripTextBox(); @@ -78,9 +81,12 @@ private void InitializeComponent() { this.EightBytesToolStripMenuItem, this.FullBytesToolStripMenuItem, this.toolStripSeparator3, - this.copySelectedToolStripMenuItem}); + this.copySelectedToolStripMenuItem, + this.copyAsUInt64ToolStripMenuItem, + this.copyAsUInt32ToolStripMenuItem, + this.copyAsUInt16ToolStripMenuItem}); this.MemoryViewContextStrip.Name = "MemoryViewContextStrip"; - this.MemoryViewContextStrip.Size = new System.Drawing.Size(167, 192); + this.MemoryViewContextStrip.Size = new System.Drawing.Size(167, 258); // // followPointerToolStripMenuItem // @@ -148,6 +154,27 @@ private void InitializeComponent() { this.copySelectedToolStripMenuItem.Text = "Copy Selected"; this.copySelectedToolStripMenuItem.Click += new System.EventHandler(this.copySelectedToolStripMenuItem_Click); // + // copyAsUInt64ToolStripMenuItem + // + this.copyAsUInt64ToolStripMenuItem.Name = "copyAsUInt64ToolStripMenuItem"; + this.copyAsUInt64ToolStripMenuItem.Size = new System.Drawing.Size(166, 22); + this.copyAsUInt64ToolStripMenuItem.Text = "Copy As UInt64"; + this.copyAsUInt64ToolStripMenuItem.Click += new System.EventHandler(this.copyAsUInt64ToolStripMenuItem_Click); + // + // copyAsUInt32ToolStripMenuItem + // + this.copyAsUInt32ToolStripMenuItem.Name = "copyAsUInt32ToolStripMenuItem"; + this.copyAsUInt32ToolStripMenuItem.Size = new System.Drawing.Size(166, 22); + this.copyAsUInt32ToolStripMenuItem.Text = "Copy As UInt32"; + this.copyAsUInt32ToolStripMenuItem.Click += new System.EventHandler(this.copyAsUInt32ToolStripMenuItem_Click); + // + // copyAsUInt16ToolStripMenuItem + // + this.copyAsUInt16ToolStripMenuItem.Name = "copyAsUInt16ToolStripMenuItem"; + this.copyAsUInt16ToolStripMenuItem.Size = new System.Drawing.Size(166, 22); + this.copyAsUInt16ToolStripMenuItem.Text = "Copy As UInt16"; + this.copyAsUInt16ToolStripMenuItem.Click += new System.EventHandler(this.copyAsUInt16ToolStripMenuItem_Click); + // // MemoryToolStrip // this.MemoryToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -266,5 +293,8 @@ private void InitializeComponent() { private System.Windows.Forms.ToolStripMenuItem FullBytesToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; private System.Windows.Forms.ToolStripMenuItem copySelectedToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyAsUInt64ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyAsUInt32ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyAsUInt16ToolStripMenuItem; } } \ No newline at end of file diff --git a/OrbisDbgUI/Forms/MemoryForm.cs b/OrbisDbgUI/Forms/MemoryForm.cs index 9be32db..a71c256 100644 --- a/OrbisDbgUI/Forms/MemoryForm.cs +++ b/OrbisDbgUI/Forms/MemoryForm.cs @@ -3,6 +3,8 @@ using System.Windows.Forms; using System.Collections.Generic; using Be.Windows.Forms; +using System.Text.RegularExpressions; +using System.Linq; namespace OrbisDbgUI { public partial class MemoryForm : Form { @@ -48,7 +50,10 @@ public void UpdateMemoryView(ulong address, uint size, byte[] memory) { } private void PeekToolStripButton_Click(object sender, EventArgs e) { - ulong address = Convert.ToUInt64(AddressToolStripTextBox.Text, 16); + + // parse out non 0-9 A-F characters using Regex + string addr = Regex.Replace(AddressToolStripTextBox.Text, "[^0-9A-F]", ""); + ulong address = Convert.ToUInt64(addr, 16); int size = Convert.ToInt32(LengthToolStripTextBox.Text, 16); this.address = address; @@ -73,7 +78,9 @@ private void SaveToolstripButton_Click(object sender, EventArgs e) { DynamicFileByteProvider dynamicFileByteProvider = MemoryViewHexBox.ByteProvider as DynamicFileByteProvider; dynamicFileByteProvider.ApplyChanges(); - File.WriteAllBytes(@"OrbisDbg\Memory.bin", MemoryData); + // Add M-D-Y H-M-S for each memory dump that way we can keep saving and not have to worry about overwriting each dump + DateTime nowdate = DateTime.Now; + File.WriteAllBytes($"OrbisDbg\\{nowdate.Month}-{nowdate.Day}-{nowdate.Year}-{nowdate.Hour}-{nowdate.Minute}-{nowdate.Second}-Memory.bin", MemoryData); } private void MemoryViewHexBox_Click(object sender, EventArgs e) { @@ -131,16 +138,42 @@ private void ChangeByteLayout_Click(object sender, EventArgs e) { private void copySelectedToolStripMenuItem_Click(object sender, EventArgs e) { MemoryViewHexBox.CopyHex(); + Clipboard.SetText(Clipboard.GetText()); } private void MemoryViewHexBox_Copied(object sender, EventArgs e) { MemoryViewHexBox.CopyHex(); + Clipboard.SetText(Clipboard.GetText()); } private void MemoryForm_Resize(object sender, EventArgs e) { MemoryViewHexBox.Width = this.Width - 17; MemoryViewHexBox.Height = this.Height - 67; } + + private void copyAsUInt64ToolStripMenuItem_Click(object sender, EventArgs e) + { + MemoryViewHexBox.CopyHex(); + + byte[] bytes = Clipboard.GetText().Split(' ').Select(s => byte.Parse(s, System.Globalization.NumberStyles.HexNumber)).ToArray(); + Clipboard.SetText(BitConverter.ToUInt64(bytes, 0).ToString("X2")); + } + + private void copyAsUInt32ToolStripMenuItem_Click(object sender, EventArgs e) + { + MemoryViewHexBox.CopyHex(); + + byte[] bytes = Clipboard.GetText().Split(' ').Select(s => byte.Parse(s, System.Globalization.NumberStyles.HexNumber)).ToArray(); + Clipboard.SetText(BitConverter.ToUInt32(bytes, 0).ToString("X2")); + } + + private void copyAsUInt16ToolStripMenuItem_Click(object sender, EventArgs e) + { + MemoryViewHexBox.CopyHex(); + + byte[] bytes = Clipboard.GetText().Split(' ').Select(s => byte.Parse(s, System.Globalization.NumberStyles.HexNumber)).ToArray(); + Clipboard.SetText(BitConverter.ToUInt16(bytes, 0).ToString("X2")); + } } public class Pointers {