Простой загрузчик, проблема с MapViewOfFileEx

Тема в разделе "WASM.WIN32", создана пользователем float, 22 июл 2010.

  1. float

    float New Member

    Публикаций:
    0
    Регистрация:
    7 янв 2010
    Сообщения:
    113
    В общем есть код

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

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Возможно, calc.exe не имеет релоков, и его нельзя загрузить по адресу, не равному ImageBase. Ведь, на сколько я понимаю, SEC_IMAGE отвечает как раз таки за загрузку модуля как исполняемого, но без запуска на исполнение.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    KeSqueer
    Можно промапить, просто регион занят. Какже секция отобразится, если там приватная память выделена:
    Код (Text):
    1. VirtualAlloc((LPVOID)p, 0x10000,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
     
  4. float

    float New Member

    Публикаций:
    0
    Регистрация:
    7 янв 2010
    Сообщения:
    113
    т.е. памяти в том регионе вообще не должно быть? и не надо выделять память для образа?
     
  5. google

    google New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2007
    Сообщения:
    140
    Ах, ну да, VirtualAlloc-то и не заметил :) Обратил внимание лишь на попытку освободить память.