簡體   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