Я хочу, чтобы сделать эти две вещи с моим приложением (только для Windows):Вставить и выполнить машинный код из памяти
- Разрешить пользователю вставлять (с помощью инструмента) нативный код в моем приложении, прежде чем начать его.
- Запустите этот введенный пользователем код прямо из памяти во время выполнения.
В идеале, для этого должен быть легко указать этот код.
У меня есть две идеи, как это сделать, что я рассматриваю сейчас:
Пользователь будет встраивать родной DLL в ресурсы приложения. Приложение будет загружать эту dll прямо из памяти с использованием методов из статьи this.
Как-то скопируйте код сборки .dll, указанный пользователем в мои ресурсы приложения, и выполните этот код из кучи, как описано в статье this.
Есть ли лучшие варианты для этого? Если нет, какие-либо мысли о том, что может вызвать проблемы в этих решениях?
EDIT
Я специально не хочу использовать LoadLibrary*
звонки, поскольку они требуют DLL файл, чтобы быть уже на жестком диске, который я пытаюсь избежать. Я также пытаюсь усложнить работу.
EDIT
Некоторые подробности: код приложения находится под моим контролем и является родным. Я просто хочу предоставить пользователю способ встроить свои собственные настраиваемые функции после того, как мое приложение будет скомпилировано и развернуто.
Пользовательский код может иметь на него произвольные ограничения, это не проблема.
Обычным и прямым способом было бы динамически загружать dll с помощью LoadLibrary() из файловой системы и вызывать хорошо известную функцию в этой DLL. Это не выполнимо – nos
Я хотел бы избежать вызова 'LoadLibrary', поскольку он требует .dll-файла уже на hdd, чего я пытаюсь избежать. – ghord
Что случилось с ['LoadLibraryEx'] (http://msdn.microsoft.com/en-US/library/ms684179.aspx) и [' GetProcAddress'] (http://msdn.microsoft.com/en-us /library/windows/apps/ms683212.aspx)? Кроме того, что вы подразумеваете под * «run [...] прямо из памяти» *? В отличие от бега? Проблемы с предлагаемыми вами решениями: программное обеспечение для защиты от вредоносных программ и вирусов будет работать с haywire. – IInspectable