ToInt32+IntPtr = OverflowException
скопипастил код на просторах интернета который демонстрирует работу сканера памяти
приведу часть кода
Код:
protected struct MEMORY_BASIC_INFORMATION
{
public IntPtr BaseAddress; // Указатель на базовый адрес региона страниц.
public IntPtr AllocationBase; // Указатель на базовый адрес диапазона страниц,
public uint AllocationProtect; // Опция Защита памяти, когда область была первоначально выделено.
public uint RegionSize; // Размер области, начиная с базового адреса
public uint State;
public uint Protect;
public uint Type;
}
List<MEMORY_BASIC_INFORMATION> MemReg { get; set; }
public void MemInfo(IntPtr pHandle) .
{ .
IntPtr Addy = new IntPtr();
while (true)
{
MEMORY_BASIC_INFORMATION MemInfo = new MEMORY_BASIC_INFORMATION();
int MemDump = VirtualQueryEx(pHandle, Addy, out MemInfo, Marshal.SizeOf(MemInfo));
if (MemDump == 0) break;
if ((MemInfo.State & 0x1000) != 0 && (MemInfo.Protect & 0x100) == 0)
MemReg.Add(MemInfo);
Addy = new IntPtr(MemInfo.BaseAddress.ToInt32() + MemInfo.RegionSize);
}
}
{
public IntPtr BaseAddress; // Указатель на базовый адрес региона страниц.
public IntPtr AllocationBase; // Указатель на базовый адрес диапазона страниц,
public uint AllocationProtect; // Опция Защита памяти, когда область была первоначально выделено.
public uint RegionSize; // Размер области, начиная с базового адреса
public uint State;
public uint Protect;
public uint Type;
}
List<MEMORY_BASIC_INFORMATION> MemReg { get; set; }
public void MemInfo(IntPtr pHandle) .
{ .
IntPtr Addy = new IntPtr();
while (true)
{
MEMORY_BASIC_INFORMATION MemInfo = new MEMORY_BASIC_INFORMATION();
int MemDump = VirtualQueryEx(pHandle, Addy, out MemInfo, Marshal.SizeOf(MemInfo));
if (MemDump == 0) break;
if ((MemInfo.State & 0x1000) != 0 && (MemInfo.Protect & 0x100) == 0)
MemReg.Add(MemInfo);
Addy = new IntPtr(MemInfo.BaseAddress.ToInt32() + MemInfo.RegionSize);
}
}
В начале, все идет хорошо, пока не достигает значения
MemInfo.BaseAddress.ToInt32() = 2147418112
MemInfo.RegionSize = 2147123200
по идее если эти два значения сложить то они не должны переполнять IntPtr. или я что то не понимаю
P/S пользовался всеми доступными поисковыми системы, даже китайской
Addy = new IntPtr(MemInfo.BaseAddress.ToInt32() + (int)MemInfo.RegionSize);