これは Form1 のコードです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace MemoryScanner
{
public partial class Form1 : Form
{
[DllImport("kernel32.dll")]
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
[In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesRead);
public static byte[] ReadBytes(IntPtr Handle, Int64 Address, uint BytesToRead)
{
IntPtr ptrBytesRead;
// ptrBytesRead = (IntPtr)30;
byte[] buffer = new byte[BytesToRead];
ReadProcessMemory(Handle, new IntPtr(Address), buffer, BytesToRead, out ptrBytesRead);
Array.Resize<byte>(ref buffer, ptrBytesRead.ToInt32());
return buffer;
}
public static int ReadInt32(long Address, uint length = 4, IntPtr? Handle = null)
{
return BitConverter.ToInt32(ReadBytes((IntPtr)Handle, Address, length), 0);
}
public static string ReadString(long Address, uint length = 32, IntPtr? Handle = null)
{
string temp3 = ASCIIEncoding.Default.GetString(ReadBytes((IntPtr)Handle, Address, length));
string[] temp3str = temp3.Split('\0');
return temp3str[0];
}
public Form1()
{
InitializeComponent();
Process p = null;
UInt32 Address = 00002688;
// get process
Process[] Processes = Process.GetProcesses();
List<Process> flash_processes = new List<Process>();
for (int i = 0; i < Processes.Length; i++)
{
//IntPtr f = Test[i].MainModule.BaseAddress;// Are you sure you want the flag process ?
p = Processes[i];
if (p.ProcessName.StartsWith("FlashPlugin") == true)
flash_processes.Add(p);
}
Process Test = flash_processes[1]; // take the second flash process .. are you sure about that? we need the second process ?
p = Candy;
UInt32 proc_base_addr = (UInt32)p.MainModule.BaseAddress.ToInt32();//+00000+1835008+100000;
uint proc_mem_sz = (uint)p.MainModule.ModuleMemorySize;
// byte[] arr = ReadBytes(p.Handle, proc_base_addr, proc_mem_sz);
byte[] arr = ReadBytes(p.Handle, proc_base_addr, proc_mem_sz);//5 * 1024 * 1024);
プロジェクトは管理下にあります。私がarrを取得しているサイズは次のとおりです:1888256また、変数proc_mem_szには次が含まれます:1888256
Windows タスク マネージャーを使用していると、2 つのプロセスが表示されます。
問題は、特定のプロセス メモリ サイズを取得できないことです。特定のプロセスのすべてのメモリを読み取る必要があります。