Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > не работает VirtualAlloc за SizeOfImage


Автор: 12usver12 24.1.2010, 22:58
Код

HMODULE ibase = GetModuleHandle(0);
PIMAGE_DOS_HEADER idh =(PIMAGE_DOS_HEADER )ibase;
PIMAGE_NT_HEADERS inh=(PIMAGE_NT_HEADERS )((DWORD)idh+idh->e_lfanew);
imgsize_pe = inh->OptionalHeader.SizeOfImage;

MEMORY_BASIC_INFORMATION mbi;
VirtualQuery((void*)(OrigIMBASE+imgsize_pe+1), &mbi,sizeof(mbi)); 
DWORD adr_toalloc = (DWORD)ibase + imgsize_pe;

bool vf = VirtualFree((void*)adr_toalloc,4096,MEM_RELEASE);
bool vpr = VirtualProtect((void*)adr_toalloc,4096,PAGE_EXECUTE_READWRITE,&odpr);
LPVOID add = VirtualAlloc((void*)(adr_toalloc),4096,MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE);
int lasterr = 0; lasterr = GetLastError();
// ошибка 487   Attempt to access invalid address.


собственно никак не могу понять почему память не выделяется сразу за виртуальным образом PE ...
есть ли какие идеи ?

Автор: GremlinProg 24.1.2010, 23:07
а с чего память за модулем должна быть свободна?
помимо исполняемого модуля может быть масса подключаемых,
да и куч может быть масса

только VirtualQuery может дать ответ что в данный момент свободно

Автор: 12usver12 25.1.2010, 11:55
а ее насильно как-то можно освободить ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)