Здаров! Вопрос следующий. Когда я загружаю экзешник под отладчиком, секция загружается по VirtualAddress, если я его меппирую из другого экзешника, этаже секция загружается по PointerToRawData. В чем подвох ?
если я правильно понял, то: в первом случае ты работаешь с загруженным процессом в АП (адресное пространство) во втором -- с файлом на диске, сам маппинг тут не при чём VirtualAddress - адрес в АП процесса PointerToRawData - ссмещение в файле
Когда ты мапируешь файл целиком, ты получаешь его в памяти так же, как он и лежит на диске (если не извращался конечно с MapViewOfFile). Поэтому раз на диске секция лежит по смещению PointerToRawData, то и в памяти будет так же. А если ты подгружаешь модуль через системный загрузчик, то он сам располагает секцию по ее VirtualAddress
Спроецировать секции сразу по их виртуальным адресам с помощью MapViewOfFileEx Например: Код (Text): MapViewOfFileEx( hMapping, FILE_MAP_READ|FILE_MAP_WRITE, Section->PointerToRawData, 0, Section->SizeOfRawData, Base + Section->VirtualAddress );
По моему человеку нужен флаг SEC_IMAGE Код (Text): CreateFileMappingW(hFile,0,PAGE_READWRITE| SEC_IMAGE,0,0,0);