none
【请教前辈,如何使用C#获取.NET托管程序的完整进程模块】 RRS feed

  • 问题

  • 各位前辈,请教下如何获取.net所开发的托管程序调用的DLL基址。
    通过process.Modules属性获取的模块里面,获取到的模块不完整,只有外部调用模块,没有其项目自身调用的项目自带DLL模块。

    请问使用什么方法能够获取进程调用的全部模块和调用模块的基址?
    2018年11月23日 2:44

全部回复

  • 您好,可以使用AppDomain的AppDomain.GetAssemblies方法

    https://docs.microsoft.com/en-us/dotnet/api/system.appdomain.getassemblies?view=netframework-4.7.2


    ericzhou

    2018年11月23日 6:52
  • using System;
    using System.Reflection;
    using System.Security.Policy;
    
    class ADGetAssemblies 
    {
    
    	public static void Main() 
    	{
    		AppDomain currentDomain = AppDomain.CurrentDomain;
    		//Provide the current application domain evidence for the assembly.
    		Evidence asEvidence = currentDomain.Evidence;
    		//Load the assembly from the application directory using a simple name.
    
    		//Create an assembly called CustomLibrary to run this sample.
    		currentDomain.Load("CustomLibrary",asEvidence);
    
    		//Make an array for the list of assemblies.
    		Assembly[] assems = currentDomain.GetAssemblies();
    	
    		//List the assemblies in the current application domain.
    		Console.WriteLine("List of assemblies loaded in current appdomain:");
    			foreach (Assembly assem in assems)
    				Console.WriteLine(assem.ToString());
    	}
       
    }


    ericzhou

    2018年11月23日 6:53
  • 感谢前辈的回复!

    我是想制作一个其他程序的外挂内存补丁,被补丁的程序是使用.NET开发的,不是获取自身的调用程序集。

    还请前辈再给指点下,感谢!!!

    2018年11月23日 8:29
  • 你好,

    在下面的代码中改成你自己要load的DLL. 

    //Create an assembly called CustomLibrary to run this sample.
    currentDomain.Load("yourdll",asEvidence);
    

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年11月26日 9:01
    版主