![]() |
eXeL@B —› Программирование —› Гранулирование страниц памяти в VirtualAllocEx |
Посл.ответ | Сообщение |
|
Создано: 14 марта 2013 12:02 · Личное сообщение · #1 Может кто-нибудь встречался с подобным: выделяю память во внешнем процессе через VirtualAllocEx, задаю конкретно нужный адрес 0x00686000 и размер блока 0x00C2D000. Память выделяется,но адрес съезжает на 0x00680000. То есть операционная система сама корректирует разбивку страниц памяти исходя из оптимальных по её мнению критерием. А можно сделать так,чтобы всё таки VirtualAllocEx игнорировала ОС и выделяла именно адрес 0x00686000 ? ![]() |
|
Создано: 14 марта 2013 12:25 · Личное сообщение · #2 Гранулярность резервирования адресного пространства - 64к, виртуалалок выравнивает по гранулярности, читай MSDN. Выделение памяти по заданному адресу не гарантируется, т.к. она может быть уже занята. Изменить нельзя. В твоем случае советую выделять больше чем надо и выравнивать как тебе хочется. ----- PGP key ![]() |
|
Создано: 14 марта 2013 12:37 · Личное сообщение · #3 Ну вообще я так и пытаюсь сейчас сделать: выделяю регион через VirtualAllocEx размером addr+0x00000100, а потом через VirtualQuery получить данные о блоке памяти из структуры MEMORY_BASIC_INFORMATION. Единственное непонятно,как получить указатель на новый буфер? Первоначальная извращенная мысль была удалить блок через VirtualFree и перезагрузить по новой VirtualAlloc уже в самом процессе-жертве. ![]() |
|
Создано: 14 марта 2013 12:42 · Поправил: Artem_N · Личное сообщение · #4 |
|
Создано: 14 марта 2013 12:46 · Поправил: Ripped_Boy · Личное сообщение · #5 |
|
Создано: 14 марта 2013 12:54 · Личное сообщение · #6 MagicLan пишет: выделяю регион через VirtualAllocEx размером addr+0x00000100 Нужно выделять размером needed + ((size_t)ptr - ((size_t)ptr & ~(65536 - 1))) Вместо 64к правильно будет взять GetSystemInfo->dwAllocationGranularity MagicLan пишет: Единственное непонятно,как получить указатель на новый буфер? Ты же указатель не получаешь а задаешь. Считай размер по вышеназванной формуле и всё, больше ничего не надо делать. ----- PGP key ![]() |
|
Создано: 14 марта 2013 13:42 · Личное сообщение · #7 |
![]() |
eXeL@B —› Программирование —› Гранулирование страниц памяти в VirtualAllocEx |