Как узнать по какому адресу промаплена секция в удаленном процессе?Ест

Тема в разделе "WASM.WIN32", создана пользователем ziral2088, 6 окт 2010.

  1. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    Clerk
    Непонятно... Для внесения ясности приведу пример. Имеется файл, размером более 64Кб (допустим 100Кб).
    Выполняем мэппинг части файла:
    Код (Text):
    1. ...
    2.     HANDLE hFile = CreateFile( pcFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    3.     //
    4.     if(hFile == INVALID_HANDLE_VALUE)
    5.     {
    6.         return FALSE;
    7.     };
    8.     //
    9.     HANDLE hFileMapping = CreateFileMapping(hFile,NULL, PAGE_READONLY, 0, 0, NULL);
    10.  
    11.     if(hFileMapping == NULL)
    12.     {
    13.         CloseHandle(hFile);
    14.         return FALSE;
    15.     };
    16.     //
    17.     PBYTE pbFile = (PBYTE) MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, dwOffset, Size);
    18.     CloseHandle(hFileMapping);
    19.    
    20.     if(pbFile == NULL).....
    Size - размер мапа
    dwOffset - смещение относительно начала файла.

    1) При Size < PAGE_SIZE отображается PAGE_SIZE(т.е. страница)
    2) При dwOffset % uAllocationGranularity != 0 - MapViewOfFile вообще ничего не проецирует (возвращает NULL)
    (вот здесь проявляется гранулярность проецироваия файла)
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    gorodon
    Если смещение в файле не кратно размеру страницы, то файл проецируется не с начала страницы.
     
  3. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Я бы за такое закапывал в младенчестве, менеджер памяти из-за этого вынужден тупорыло копировать отмапленую страницу в то, что хочет видеть (!@#$%^) процесс. Опять же, zero-page thread работал(а) зря.