Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ToInt32+IntPtr = OverflowException

88K
06 мая 2015 года
Robert Paulig
2 / / 06.05.2015
Здрасте! моя ос Win7 64bit
скопипастил код на просторах интернета который демонстрирует работу сканера памяти

приведу часть кода

Код:
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);

               
            }
        }
процесс что я читаю 32 битный.
В начале, все идет хорошо, пока не достигает значения
MemInfo.BaseAddress.ToInt32() = 2147418112
MemInfo.RegionSize = 2147123200
по идее если эти два значения сложить то они не должны переполнять IntPtr. или я что то не понимаю

P/S пользовался всеми доступными поисковыми системы, даже китайской
88K
06 мая 2015 года
Robert Paulig
2 / / 06.05.2015
Addy = new IntPtr(MemInfo.BaseAddress.ToInt32() + (int)MemInfo.RegionSize);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог