Маппинг

Тема в разделе "WASM.BEGINNERS", создана пользователем Aspire, 29 июл 2007.

  1. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Здаров! Вопрос следующий. Когда я загружаю экзешник под отладчиком, секция загружается по VirtualAddress, если я его меппирую из другого экзешника, этаже секция загружается по PointerToRawData. В чем подвох ?
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    если я правильно понял, то:
    в первом случае ты работаешь с загруженным процессом в АП (адресное пространство) во втором -- с файлом на диске, сам маппинг тут не при чём
    VirtualAddress - адрес в АП процесса
    PointerToRawData - ссмещение в файле
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    В том, что никто за тебя кроме системного загрузчика не будет правильно загружать секции.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Когда ты мапируешь файл целиком, ты получаешь его в памяти так же, как он и лежит на диске (если не извращался конечно с MapViewOfFile). Поэтому раз на диске секция лежит по смещению PointerToRawData, то и в памяти будет так же.
    А если ты подгружаешь модуль через системный загрузчик, то он сам располагает секцию по ее VirtualAddress
     
  5. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Сенкс!
    Добавлено при редактировании. А как можно извратиться с MapViewOfFile ? ;)
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Спроецировать секции сразу по их виртуальным адресам с помощью MapViewOfFileEx
    Например:

    Код (Text):
    1. MapViewOfFileEx( hMapping, FILE_MAP_READ|FILE_MAP_WRITE, Section->PointerToRawData, 0, Section->SizeOfRawData, Base + Section->VirtualAddress );
     
  7. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    По моему человеку нужен флаг SEC_IMAGE
    Код (Text):
    1. CreateFileMappingW(hFile,0,PAGE_READWRITE| SEC_IMAGE,0,0,0);
     
  8. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Да. Спасибо всем !