Я пытаюсь загрузить сборку из внедренной 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.
Я думаю, что моя проблема настолько проста, но я не могу найти почему.
Заранее спасибо, надеюсь вы понимаете о чем я 🙂
Задача ещё не решена.
Других решений пока нет …