Parent Directory
|
Revision Log
|
Patch
--- trunk/RomCheater/Docking/FloatingRamDumperDialog.cs 2012/05/28 04:14:03 156 +++ trunk/RomCheater/Docking/FloatingRamDumperDialog.cs 2012/05/28 08:32:18 168 @@ -9,6 +9,9 @@ using WeifenLuo.WinFormsUI.Docking; using RomCheater.PluginFramework.Interfaces; using System.Diagnostics; +using System.IO; +using RomCheater.Logging; +using System.Reflection; namespace RomCheater.Docking { @@ -72,19 +75,19 @@ switch (dumpSize) { case DumpSize.Bytes: - end = (ulong)(Convert.ToDouble(txtDumpSize.Text) * 1.0 + start) - BYTE_CORRECTION_VALUE; + end = (ulong)(Convert.ToDouble(txtDumpSize.Text) * 1.0 + (double)start) + BYTE_CORRECTION_VALUE; txtEnd.Value = end; break; case DumpSize.KiloBytes: - end = (ulong)(Convert.ToDouble(txtDumpSize.Text) * 1000.0 + start) - BYTE_CORRECTION_VALUE; + end = (ulong)(Convert.ToDouble(txtDumpSize.Text) * 1000.0 + (double)start) + BYTE_CORRECTION_VALUE; txtEnd.Value = end; break; case DumpSize.MegaBytes: - end = (ulong)(Convert.ToDouble(txtDumpSize.Text) * 1000000.0 + start) - BYTE_CORRECTION_VALUE; + end = (ulong)(Convert.ToDouble(txtDumpSize.Text) * 1000000.0 + (double)start) + BYTE_CORRECTION_VALUE; txtEnd.Value = end; break; case DumpSize.GigaBytes: - end = (ulong)(Convert.ToDouble(txtDumpSize.Text) * 1000000000.0 + start) - BYTE_CORRECTION_VALUE; + end = (ulong)(Convert.ToDouble(txtDumpSize.Text) * 1000000000.0 + (double)start) + BYTE_CORRECTION_VALUE; txtEnd.Value = end; break; } @@ -155,6 +158,23 @@ private void DumpRam(ulong start, ulong end, string filename) { uint byte_count = (uint)(end - start); + string arch = ProcessorAssemblyArchitecture.GetProcessorArchitecture(typeof(FloatingRamDumperDialog).Assembly); + if (arch == ProcessorAssemblyArchitecture.x86) + { + // intptr is 4 bytes on x86 + if (end > int.MaxValue) + logger.Warn.WriteLine("Warning: DumpRam(): ending address is greater than 0x{0:x8} and we are running x86, this will exceed the max value for IntPtr", int.MaxValue); + } + else if (arch == ProcessorAssemblyArchitecture.x64) + { + // inptr is 8 bytes on x64 + if (end > uint.MaxValue) + logger.Warn.WriteLine("Warning: DumpRam(): ending address is greater than 0x{0:x8} and we are running x64, this will exceed the max value for UIntPtr", int.MaxValue); + } + else + { + throw new InvalidProgramException(string.Format("Unexcepted processor aritecture: expected x86 or x64 but we have: {0}", arch)); + } DumpRam(start, byte_count, filename); } private void DumpRam(ulong start, uint count, string filename) @@ -164,8 +184,8 @@ reader.ReadProcess = this.AcceptedProcess; reader.OpenProcess(); int bytesReadSize; - byte[] data = reader.ReadProcessMemory((IntPtr)(uint)start, count, out bytesReadSize); - reader.CloseHandle(); + reader.DumpMemory(filename, (uint)start, count, out bytesReadSize); + reader.CloseHandle(); } #endregion }
ViewVC Help | |
Powered by ViewVC 1.1.22 |