В общем есть код Код (Text): int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { HANDLE file = CreateFile("C:\\WINDOWS\\system32\\calc.exe",GENERIC_READ,NULL,NULL,OPEN_EXISTING,NULL,NULL); HANDLE map = CreateFileMapping(file,NULL,PAGE_READONLY|SEC_IMAGE,NULL,NULL,"calc"); DWORD size=GetFileSize(file,0); DWORD p=0x400000; while(p<size+0x400000) { UnmapViewOfFile((LPCVOID)p); VirtualFree((LPVOID)p, 0, MEM_RELEASE); VirtualAlloc((LPVOID)p, 0x10000,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); p+=0x10000; } MapViewOfFileEx(map,FILE_MAP_READ,NULL,NULL,p-0x400000,(LPVOID)0x400000); return 0; } часть кода перед MapViewOfFileEx многократно изменялась без влияния на результат работы MapViewOfFileEx, который возвращает ERROR_INVALID_ADDRESS. В чем может быть ошибка?
Возможно, calc.exe не имеет релоков, и его нельзя загрузить по адресу, не равному ImageBase. Ведь, на сколько я понимаю, SEC_IMAGE отвечает как раз таки за загрузку модуля как исполняемого, но без запуска на исполнение.
KeSqueer Можно промапить, просто регион занят. Какже секция отобразится, если там приватная память выделена: Код (Text): VirtualAlloc((LPVOID)p, 0x10000,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);