Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我称之为C++/Dllmain(C)中的CLI代码_C#_.net_C++ Cli_Dll Injection - Fatal编程技术网

C# 为什么可以';我称之为C++/Dllmain(C)中的CLI代码

C# 为什么可以';我称之为C++/Dllmain(C)中的CLI代码,c#,.net,c++-cli,dll-injection,C#,.net,C++ Cli,Dll Injection,我需要在目标进程中钩住一个特定的.NET函数。因此,我已经准备好注入我的C#Dll,但我需要一种方法,在加载Dll后创建钩子 问题:C中没有像dllmain这样的东西# 解决方案:以下是我尝试的内容> 我没有50个名声,所以我不能评论@mheyman-answer。但我照他的建议做了,把所有的东西都编译到一个Dll中,然后把它注入到我的目标进程中。但它阻碍了以下方面的发展: LaunchDll(dll, len, "MyNamespace.MyClass", "DllMain"); in dl

我需要在目标进程中钩住一个特定的.NET函数。因此,我已经准备好注入我的C#Dll,但我需要一种方法,在加载Dll后创建钩子

问题:C中没有像dllmain这样的东西#

解决方案:以下是我尝试的内容>

我没有50个名声,所以我不能评论@mheyman-answer。但我照他的建议做了,把所有的东西都编译到一个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.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)

  • 当然,target.exe和Dll在同一配置中(64位)
  • 我把所有的东西都编译成了发行版(谁知道呢?-),但没有任何变化

  • 以下是配置文件的源代码: 通行证:Loaderdellso

以下是.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);
   }
}

}

错误“此应用程序已请求运行时以异常方式终止它”仅表示应用程序调用了“abort()”函数,并且由于您的代码中没有调用该函数(我假定),因此表示DLL加载程序调用了该函数。当我把32位代码和64位代码混在一起时,或者当我把运行库混在C/C++代码中时,我倾向于看到它。但是所有的东西都是64位的,而且无论如何,它甚至没有进入LaunchDll函数,所以没有加载我的Dll。似乎它不喜欢的是你作为答案发布的代码,但我认为它对你有效,所以我的情况下哪里会有问题?@mheyman可能我还不清楚(你的评论显示了这一点),我对你的解决方案进行了清晰的复制粘贴,我没有做任何更改。因此,不,我不调用abort(),也不混合使用32位和64位代码,也不在C/C++代码中使用运行库。所以现在,我不知道我还能尝试什么。@mheyman我尝试了所有的事情,甚至更改了Dll,现在我被卡住了。你能给我提供一个工作代码(dllmain.cpp、launchdll.cpp、Dll和config文件),以便我比较并找到问题的根源吗?这对我帮助很大!这已经在我的一个项目中工作了多年(类名发生了变化)——我昨天刚刚重建了它以进行验证。我无法重现您的失败。“此应用程序已请求运行时以异常方式终止它”错误仅表示应用程序已调用“abort()”函数,并且由于您的代码中未调用该函数(我假定),因此表示DLL加载程序已调用该函数。当我把32位代码和64位代码混在一起时,或者当我把运行库混在C/C++代码中时,我倾向于看到它。但是所有的东西都是64位的,而且无论如何,它甚至没有进入LaunchDll函数,所以没有加载我的Dll。似乎它不喜欢的是你作为答案发布的代码,但我认为它对你有效,所以我的情况下哪里会有问题?@mheyman可能我还不清楚(你的评论显示了这一点),我对你的解决方案进行了清晰的复制粘贴,我没有做任何更改。因此,不,我不调用abort(),也不混合使用32位和64位代码,也不在C/C++代码中使用运行库。所以现在,我不知道我还能尝试什么。@mheyman我尝试了所有的事情,甚至更改了Dll,现在我被卡住了。你能给我提供一个工作代码(dllmain.cpp、launchdll.cpp、Dll和config文件),以便我比较并找到问题的根源吗?这对我帮助很大!这已经在我的一个项目中工作了多年(类名发生了变化)——我昨天刚刚重建了它以进行验证。我无法再现你的失败。