0

DllEntryPoint、FuncX 以外に 1 つの関数をエクスポートするネイティブ C dll があります。FuncX の戻り値の型が void でパラメーターがないため、FuncX が呼び出し元とどのように通信するかを調べようとしています。C# ハーネスから呼び出すと、AccessViolationException - Attempted to read or write protected memory が発生します。

クライアントアプリケーションがdllから値を送受信するためのバッファを割り当てる可能性があるという予感があります。これは有効な予感ですか?

何らかの理由でクライアント アプリケーションが実行されないため、クライアント アプリケーションをデバッグできません。そのため、クライアント アプリケーションを起動してプロセスにアタッチできません。ただし、IDA Pro で逆アセンブルすることはできますが、できればそこでデバッグしてみる方法がわかりません。

4

2 に答える 2

1

問題の DLL に静的シンボルまたはグローバル シンボルがある場合、すべての通信がそれらのシンボルを介して行われる可能性があります。これを行っているように見える API コードはありますか?

クライアントとサーバーの両方がそのバッファーのベースアドレスを知る必要があるため、DLL がクライアント提供のバッファーを使用している可能性は低く、呼び出し時に「優先」アドレスを calloc または malloc に要求することはできません。

また、実行link /dump /symbolsして DLL を指定することもできます。これにより、DLL にエクスポートされたシンボルのリストが表示されます。幸運を!

于 2009-02-24T19:09:48.030 に答える
0

DLL 自体を IDA Pro にロードしてみます。うまくいけば、C# はネイティブ コール スタックを保持し、DLL がクラッシュする場所の周りのコードを確認できます。

補足: Decompiler プラグインは非常に優れています。

于 2009-02-24T20:52:45.003 に答える