繁体   English   中英

C#-从字节加载本地dll []

[英]c# - loading native dll from byte[]

我正在开发一个项目,该项目涉及从.net程序中的网页接收byte [],然后将该byte []作为dll加载。 但是,dll不是.net程序集,它是本机程序集。 我不能使用loadlibrary,因为我必须写入磁盘,并且我想将本机dll保留在内存中。 我不能使用c ++ / cli,因为这都是在mono中完成的,而mono不支持c ++ / cli。 是否有某个库或项目可以让我从C#中的byte []中加载本机dll? 我看过本教程: https : //www.joachim-bauch.de/tutorials/loading-a-dll-from-memory/ ,但这是c ++。

这将帮助您,或将您引向某个地方。

这基本上是您发送的项目的包装,我将为希望查看该项目的任何人提供该回购协议。 未经测试的32位操作系统,因此可能会产生开销。

https://github.com/dretax/DynamicDllLoader

它基本上可以满足您的需求。 期望本机dll的字节数组,并将其加载到当前进程中。

只需使用Assembly.Load(如果是.Net程序集) https://msdn.microsoft.com/zh-cn/library/h538bck7(v= vs.110) .aspx

否则,将PInvoke与非托管DLL一起使用。

我将简要介绍一下问题所在:

  • 您正在从互联网上收到一个DLL。 每个管理员都会想知道他是不是疯了,或者真的站在“它如何工作”的描述中。 上个世纪,我们在数据阵列上执行远程代码执行和代码注入时遇到了足够的问题,无需尝试即可知道如何失败。
  • 托管.NET Runtime的设计中没有任何内容,因此您不能那样做。 您可能必须使用不需要的代码。 到那时,您最好还是用本机C ++编写。
  • 它甚至可能会出于某些目的而跳出一些工厂病毒扫描程序的试探法。 因为这是在简短清单上,所以我的操作系统的访问者永远不要尝试拉。

您真的应该真的埋葬这个主意,并在没有它的情况下生活。 如果您有一个老板想要这个,请说他这是不可能的,比喻是疯狂的。 甚至在字面上可能是疯狂的。 即使您可以做到,也没有管理员可以安装它。

如果那并没有阻止您:最好将其转移到某种帮助程序中,然后通过进程间通信传输数据/结果。 从.NET应用程序调用旧的,未管理的, 从未迁移到64位的DLL时 ,二进制不匹配通常是一个问题。 辅助进程(始终在x32上运行以匹配DLL)可以帮助您解决此问题。 一旦有了帮助程序,就可以使用Native C ++之类的程序进行编程,在这种程序中,这种类型的恶作剧变得更加容易,甚至可以举个例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM