Я хотел бы получить справочную информацию или справку по этому коду настройки.
private MemoryInformation[][] GetRegions()
{
var addy = new IntPtr();
IList<MemoryInformation> regions
= new List<MemoryInformation>();
while (true)
{
var memInf = new MemoryInformation();
int memDump = Pinvoke.VirtualQueryEx(_access.Handle, addy,
out memInf, Marshal.SizeOf(memInf));
if (memDump == 0)
return DivideRegions(regions);
var memProps = MemoryProperties.Parse(memInf);
if (!memProps.State.IsCommited &&
!memProps.Protect.IsGuard &&
memProps.Protect.IsReadOnly)
goto ADDY;
if (!Settings.MemPrivate)
{
if (memProps.Type.IsPrivate)
goto ADDY;
}
if (!Settings.MemImage)
{
if (memProps.Type.IsImageMapped)
goto ADDY;
}
if (!Settings.MemMapped)
{
if (memProps.Type.IsMapped)
goto ADDY;
}
if (Settings.Writable != ScanType.BOTH)
{
if (Settings.Writable == ScanType.ONLY)
{
if (!memProps.Protect.IsWritable)
goto ADDY;
}
else if (memProps.Protect.IsWritable)
goto ADDY;
}
if (Settings.CopyOnWrite != ScanType.BOTH)
{
if (Settings.CopyOnWrite == ScanType.ONLY)
{
if (!memProps.Protect.IsCopyOnWrite)
goto ADDY;
}
else if (memProps.Protect.IsCopyOnWrite)
goto ADDY;
}
if (Settings.Executable != ScanType.BOTH)
{
if (Settings.Executable == ScanType.ONLY)
{
if (!memProps.Protect.IsExecutable)
goto ADDY;
}
else if (memProps.Protect.IsExecutable)
goto ADDY;
}
regions.Add(memInf);
ADDY:
addy = new IntPtr(memInf.BaseAddress.ToInt32()
+ (int)memInf.RegionSize);
}
}
private MemoryInformation[][] DivideRegions(IEnumerable<MemoryInformation> regions)
{
var regionsArray = regions.ToArray();
var result = regionsArray.Length / _tasksAmount;
var rest = regionsArray.Length - (result * _tasksAmount);
var count = 0;
IList<MemoryInformation> subList
= new List<MemoryInformation>();
IList<MemoryInformation[]> list
= new List<MemoryInformation[]>();
for (int i = 0; i < _tasksAmount; i++)
{
subList = new List<MemoryInformation>();
for (int x = 0; x < result; x++)
subList.Add(regionsArray[count++]);
list.Add(subList.ToArray());
}
if (rest != 0)
{
subList = new List<MemoryInformation>();
for (int i = 0; i < rest; i++)
subList.Add(regionsArray[count++]);
list.Add(subList.ToArray());
}
return list.ToArray();
}
Я прочитал и немного ознакомился с этим кодом и знаю, что могу изменить начальный адрес на var addy = new IntPtr(); (ln 3)
, используя вот так var addy = new IntPtr(0x10000000); (ln 3)
Но я застрял в том месте, где не знаю, как изменить Максимальное значение.
Кстати, я использую сканер памяти nutdeep по этой ссылке NuGet, Nutdeep . В руководстве по пакету не сказано, как изменить минимальный адрес и максимальный адрес. Так что это мой вопрос.
Как изменить максимальный адрес?
Спасибо.
PS. Код может больше с этой страницы. Но я выбираю важный код для вставки (это значит, что он может ответить на мой вопрос).