ゲームランチャーであるアプリケーションがあります。アプリケーションの実行中に、そのファイルにロードされている dll をループして、特定の関数がエクスポートされているかどうかを確認したいと考えています。
どうやってやるの?
ネットリフレクターの使用について話しているのではありません。ゲームランチャーからメモリにロードされたdllによってエクスポートされた関数をチェックし、それらをループして特定の関数が呼び出されているかどうかを確認したい.
ゲームランチャーであるアプリケーションがあります。アプリケーションの実行中に、そのファイルにロードされている dll をループして、特定の関数がエクスポートされているかどうかを確認したいと考えています。
どうやってやるの?
ネットリフレクターの使用について話しているのではありません。ゲームランチャーからメモリにロードされたdllによってエクスポートされた関数をチェックし、それらをループして特定の関数が呼び出されているかどうかを確認したい.
ジャックス、この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
.net リフレクションを使用します。これを行う方法の良いサンプルを次に示します。
http://towardsnext.wordpress.com/2008/09/17/listing-types-and-methods-of-assembly-reflection/