2016-09-26 10 views
0

Я сделал код PE-упаковщика на C++, который загружает исполняемый файл в его пространство процессов, исправляет IAT и перемещение, а затем вызывает точку входа.Загрузка памяти .NET PE из собственного процесса

Моя проблема в том, что .NET не поддерживается: я искал формат .NET PE, и это всего лишь 32-разрядный исполняемый файл с точкой входа, установленной на импортированную функцию (_CorExeMain).

Если я его назову, окна просто всплывают с ошибкой, которая говорит мне, что я не установил .NET.

Я также прочитал, что исполняемые файлы .NET PE имеют специальный COM-заголовок в DataDirectory, но я не знаю, как его обрабатывать.

Я надеюсь, что кто-то может мне помочь.
Заранее спасибо

+0

PE - это просто формат контейнера, такой как AVI. Он не дает никаких гарантий относительно того, что внутри. Он просто определяет протокол, где и как кодируется информация. Тот факт, что сборки .NET используют формат файла PE, не означает, что вы можете просто загрузить его как собственную (неуправляемую) DLL. Вы должны [разместить CLR] (https://msdn.microsoft.com/en-us/library/ms404385.aspx), чтобы активировать типы в управляемых сборках. В стороне файлы .winmd также повторно используют формат файла PE (но не содержат никакого кода). – IInspectable

+0

Соответствующие чтения: [Анатомия сборки .NET - Загрузчик загрузчика CLR] (https://www.simple-talk.com/blogs/anatomy-of-a-net-assembly-the-clr-loader-stub/). – IInspectable

ответ

0

Очевидно, что идея, которую вы имели, не работает как. Для .Net.

Ваш «упакованный» исполняемый файл - это просто исполняемый файл, чей код является распаковщиком и чьи данные представляют собой сжатый реальный исполняемый файл. При запуске Windows ожидает и получает собственный код.

Для исполняемых файлов .Net вы должны, очевидно, сделать то же самое: записать исполняемый файл .Net, код которого является распаковщиком, а чьи данные - сжатый байт-код .Net.

 Смежные вопросы

  • Нет связанных вопросов^_^