c # — Mono: загрузить сборку из внедренной dll в процесс

Я пытаюсь загрузить сборку из внедренной dll (c ++),

Сначала я зацепил:

pMono1 = (Mono1Fn)DetourFunction((PBYTE)GetProcAddress(addr,"mono_assembly_load_from_full"), (PBYTE)Mono1);
pMono2 = (Mono2Fn)GetProcAddress(addr, "mono_image_open_full");
mono_jit_exec_ = (mono_jit_exec_t)GetProcAddress(addr,"mono_jit_exec");
pMonoDomainGet = (mono_domain_get_t)GetProcAddress(addr,"mono_domain_get");

(Я проверил, что адрес правильный)

Тогда то, что я делаю,

MonoAssembly* __cdecl Mono1(MonoImage *image, const char*fname, MonoImageOpenStatus *status, gboolean refonly)
{
if(!Loaded)
{
Loaded = true;
OpenAssembly();}

return pMono1(image,fname,status,refonly);
}

Итак, что я пытаюсь сделать, это:

Когда целевой процесс открывает сборку, я открываю свою и исходную сборку для загрузки

Но проблема в том, что открытая сборка не запускается.

Вот метод OpenAssembly ():

void OpenAssembly()
{
MonoImageOpenStatus status = MONO_IMAGE_ERROR_ERRNO;
MonoImage *Image = (MonoImage*)pMono2("B:\\AsmTest.dll",&status,FALSE);
MonoAssembly *Assm =  (MonoAssembly*)Mono1(Image,"B:\\AsmTest.dll",&status,FALSE);
char* in[] = {"B:\\AsmTest.dll" };
cout << "In[0] : " << in[0] << endl;
mono_jit_exec_((MonoDomain*)pMonoDomainGet(),Assm,0,in);

}

В моно-учебнике по встраиванию говорится, что mono_jit_exec вызывает метод Main,

но это не так, (что заставляет меня думать, что ошибка в моей сборке),

Вот код простой сборки:

 public class AssemblyTest
{

static void Main()
{MessageBox.Show("I do WORK :d");}
}

Как я уже говорил, моя проблема в том, что Main() метод никогда не вызывается в процессе (потому что MessageBox не отображается)

Для вашего сведения: я поместил сборку на диск B.

Я думаю, что моя проблема настолько проста, но я не могу найти почему.

Заранее спасибо, надеюсь вы понимаете о чем я 🙂

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …