-1

我有一个应用程序,它是一个游戏启动器。在应用程序运行时,我想遍历该文件中加载的 dll 并检查是否导出了某个函数。

我怎样才能做到这一点?

我不是在谈论使用网络反射器我想通过从游戏启动器加载到内存中的 dll 检查导出的函数,并循环遍历它们以查看是否调用了某个函数。

4

3 回答 3

1

Jax,看看这个 StackOverflow 问题。它应该能够完全满足您的需求。为简单起见,请特别查看说明使用的注释Dumpbin.exe /exports。这可能是最简单的方法。如果您绝对需要以编程方式执行此操作,请查看此 Stackoverflow 问题

使用 Dumpbin 方法,您可以执行以下操作:

        // The name of the DLL to output exports from
        const string dllName = @"C:\Windows\System32\Wdi.dll";
        string output = string.Empty;
        var info = new ProcessStartInfo();
        var process = new Process();

        info.CreateNoWindow = true;
        info.RedirectStandardOutput = true;
        info.UseShellExecute = false;
        info.EnvironmentVariables.Remove("Path");
        // DumpBin requires a path to IDE
        info.EnvironmentVariables.Add("Path", Environment.GetEnvironmentVariable("Path") + @";c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\");

        // Your path might be different below.
        info.FileName = @"c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\dumpbin.exe";

        info.Arguments = string.Format("/exports \"{0}\"", dllName);

        process.OutputDataReceived += (senderObject, args) => output = output + args.Data;
        process.StartInfo = info;
        process.Start();
        process.BeginOutputReadLine();

        process.WaitForExit();
        // output now contains the output
于 2012-09-28T20:21:59.743 回答
0

你可能想看看类似的东西

在 C# 中使用反射在运行时加载未引用的程序集

反射示例 [C#]

于 2012-09-28T20:00:09.017 回答
0

使用 .net 反射。这是如何执行此操作的好示例:

http://towardsnext.wordpress.com/2008/09/17/listing-types-and-methods-of-assembly-reflection/

于 2012-09-28T19:58:56.057 回答