Я сделал код PE-упаковщика на C++, который загружает исполняемый файл в его пространство процессов, исправляет IAT и перемещение, а затем вызывает точку входа.Загрузка памяти .NET PE из собственного процесса
Моя проблема в том, что .NET не поддерживается: я искал формат .NET PE, и это всего лишь 32-разрядный исполняемый файл с точкой входа, установленной на импортированную функцию (_CorExeMain).
Если я его назову, окна просто всплывают с ошибкой, которая говорит мне, что я не установил .NET.
Я также прочитал, что исполняемые файлы .NET PE имеют специальный COM-заголовок в DataDirectory, но я не знаю, как его обрабатывать.
Я надеюсь, что кто-то может мне помочь.
Заранее спасибо
PE - это просто формат контейнера, такой как AVI. Он не дает никаких гарантий относительно того, что внутри. Он просто определяет протокол, где и как кодируется информация. Тот факт, что сборки .NET используют формат файла PE, не означает, что вы можете просто загрузить его как собственную (неуправляемую) DLL. Вы должны [разместить CLR] (https://msdn.microsoft.com/en-us/library/ms404385.aspx), чтобы активировать типы в управляемых сборках. В стороне файлы .winmd также повторно используют формат файла PE (но не содержат никакого кода). – IInspectable
Соответствующие чтения: [Анатомия сборки .NET - Загрузчик загрузчика CLR] (https://www.simple-talk.com/blogs/anatomy-of-a-net-assembly-the-clr-loader-stub/). – IInspectable