为什么我不能从Dllmain(C)调用C ++ / CLI代码

时间:2019-02-18 12:34:49

标签: c# .net c++-cli dll-injection

我需要在目标进程中挂钩特定的.NET函数。因此,我已经准备好注入C#Dll,但是一旦dll被加载,我就需要一种制作钩子的方法。

问题:在C#中没有dllmain之类的东西

解决方案:这是我尝试的方法> C# equivalent of DllMain in C (WinAPI)

我没有50个声望,所以我无法评论@mheyman答案。但是我按照他的建议做了所有事情,将所有内容编译到一个Dll中,然后将其注入到目标进程中。但它在以下级别受阻:

 LaunchDll(dll, len, "MyNamespace.MyClass", "DllMain"); in dllmain.cpp

我走不远了,我得到了错误

  

此应用程序已请求运行时以   不寻常的方式。请与应用程序的支持团队联系以获取更多信息   信息

LaunchDll函数永远不会执行,并且如果我对其进行修改以使其立即返回,我仍然会得到相同的行为,这使我认为问题出在调用LaunchDll。

这是我从Visual Studio的即时调试器中获得的输出:

  

...

     

'target.exe'(Win32):已加载'C:\ Windows \ System32 \ api-ms-win-core-processthreads-l1-1-1.dll'。符号已加载。   'target.exe'(Win32):已加载'C:\ Windows \ System32 \ api-ms-win-core-file-l1-2-0.dll'。符号已加载。   'target.exe'(Win32):已加载'C:\ Windows \ System32 \ api-ms-win-core-timezone-l1-1-0.dll'。符号已加载。   'target.exe'(Win32):已加载'C:\ Windows \ System32 \ api-ms-win-core-file-l2-1-0.dll'。符号已加载。   'target.exe'(Win32):已加载'C:\ Windows \ System32 \ api-ms-win-core-synch-l1-2-0.dll'。符号已加载。   线程0xc27c已退出,代码为3(0x3)。线程0x828c具有   以代码3(0x3)退出。线程0xb47c已退出,代码为3   (0x3)。线程0xbce0已退出,代码3(0x3)。线程   0xb974已退出,代码为3(0x3)。线程0x68d4已退出   代码3(0x3)。线程0xc4e8已退出,代码3(0x3)。的   线程0xc748已退出,代码3(0x3)。线程0xc198具有   以代码3(0x3)退出。线程0xa708已退出,代码为3   (0x3)。线程0x8870已退出,代码为3(0x3)。线程   0xc02c已退出,代码为3(0x3)。线程0xc3fc已经退出   代码3(0x3)。线程0x995c已退出,代码为3(0x3)。的   线程0xb790已退出,代码为3(0x3)。线程0xb9b8具有   以代码3(0x3)退出。程序“ [47324] target.exe”已退出   代码为3(0x3)。

这是.NET Dll的代码:

namespace MyNameSpace {
public class MyClass {
    public static void DllMain() {
        string text1 = "random Text from .NET Dll \n ";
        System.IO.File.WriteAllText(@"D:\\TestFromCSharp.txt", text1);
   }
}

}

0 个答案:

没有答案