eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Adler (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› VirtualAlloc переодически возращает NULL
Посл.ответ Сообщение


Ранг: 71.9 (постоянный)
Статус: Участник

Создано: 13 мая 2015 17:07 New!
Цитата · Личное сообщение · #1

Иногда VirtualAlloc возвращает NULL, что делать в такой ситуации? Как все таки получить нужную память?

Code:
  1.     ptr= (unsigned char *)VirtualAlloc((LPVOID)(old_header->OptionalHeader.ImageBase),
  2.         old_header->OptionalHeader.SizeOfImage,
  3.         MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);


Ранг: 533.6 (!)
Статус: Uploader
retired

Создано: 13 мая 2015 17:13 New!
Цитата · Личное сообщение · #2

Получить последнюю ошибку и узнать в чем дело?!


Ранг: 71.9 (постоянный)
Статус: Участник

Создано: 13 мая 2015 17:17 New!
Цитата · Личное сообщение · #3

BoRoV - дело в том, что VirtualAlloc не может выделить регион требуемого размера, поэтому функция возвращает NULL. Хотя суммарное количество свободной памяти у меня навалом.


Ранг: 660.7 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 13 мая 2015 17:20 New!
Цитата · Личное сообщение · #4

jangle
Из-за фрагментации памяти, возможно, есть смысл использовать HeapAlloc?

Ранг: 95.7 (постоянный)
Статус: Участник

Создано: 13 мая 2015 17:20 New!
Цитата · Личное сообщение · #5

Ищите косяк в своем коде.


Ранг: 149.7 (ветеран)
Статус: Участник

Создано: 13 мая 2015 17:21 · Поправил: 13 мая 2015 17:24 -=AkaBOSS=- New!
Цитата · Личное сообщение · #6

GetLastError что говорит?
если сделать VirtualFree и повторить аллок, что будет?

мсдн: VirtualAlloc cannot reserve a reserved page
и еще
If the lpAddress parameter is not NULL, the function uses the lpAddress and dwSize parameters to compute the region of pages to be allocated. The current state of the entire range of pages must be compatible with the type of allocation specified by the flAllocationType parameter. Otherwise, the function fails and none of the pages are allocated.

Так ли уж вам нужна память именно по указанному адресу? Может, есть смысл первым параметром слать NULL - тогда аллокнет где сможет, а вам останется релоки настроить.

| Сообщение посчитали полезным: jangle



Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 13 мая 2015 17:41 New!
Цитата · Личное сообщение · #7

потому что адрес занят и скорее всего там не VirtualFree делать надо, а ZwUnmapViewOfSection?
а лучше понять, почему так происходит и не задавать глупых вопросов.


Ранг: 312.4 (мудрец)
Статус: Участник

Создано: 13 мая 2015 17:45 New!
Цитата · Личное сообщение · #8

Что мешает в оле в memory map глянуть на момент получения ошибки?
 eXeL@B —› Программирование —› VirtualAlloc переодически возращает NULL

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS