float 1. Перечисляются все секции в модуле посредством NtQueryVirtualMemory. На каждой итерации адрес увеличивается на получаемый размер региона. RVA, Size, Protect каждого региона сохраняется в виде структуры в массиве. 2. Создаётся не файловая секция и проецируется на R/W. 3. Перичисляются все описатели регионов в таблице и каждый описываемый регион копируется в проекцию секции по смещению в ней равному RVA копируемого региона. Сохранять секции кода из текущей проекции не обязательно, можно спроецированть оригинальный модуль и секции для которых нет W-атрибута сохранить. Это приведёт к восстановлению проекции. 4. Оригинальный модуль анмапится посредством NtUnmapViewOfSection. 5. Выполняется цикл проекцирования регионов из секции. Каждый регион проецируется по RVA из таблицы и с сохранёнными атрибутами. Это древний код, сейчас автор реализовал бы совершенно иначе. Для чего там изменяются сегментные регистры не знаю, видимо были есчо какието манипуляции с LDT..