c # Область памяти - PullRequest
       1

c # Область памяти

0 голосов
/ 09 января 2019

Я хотел бы получить справочную информацию или справку по этому коду настройки.

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. Код может больше с этой страницы. Но я выбираю важный код для вставки (это значит, что он может ответить на мой вопрос).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...