单声道:从进程上的注入dll加载程序集

时间:2014-02-16 10:46:57

标签: c# c++ .net mono .net-assembly

我正在尝试从注入的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");

(我已经检查过addr是否正确)

然后我做的是

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盘。

我认为我的问题很简单,但我找不到原因。

先谢谢,我希望你明白我的意思:)。

0 个答案:

没有答案