私は仮想マシンのネイティブ呼び出しバインディングを作成しています。この機能の1つは、標準のlibc関数を実行時に名前で検索することです。私がmsvcrtモジュールへのハンドルを取得する必要があるので、ウィンドウにこれは少し面倒になります。現在、プロセスにロードされています。通常これはmsvcrt.dllですが、別の亜種(msvcr100.dllなど)であっても、異なる名前のバリアントが使用された場合はGetModuleHandle( "msvcrt")の呼び出しが失敗する可能性があります。Win32でfunc ptrからモジュールHANDLEを取得するには?
私ができることを望むのは逆参照で、libc(豊富にある)から関数ポインタを取り出し、それを提供するモジュールへのハンドルを取得します。基本的には、このような何か:
HANDLE hlibc = ReverseGetModuleHandle(fprintf); // Any func from libc should do the trick
void *vfunc = GetProcAddress(hlibc);
は、プロセスハンドルとシンボルテーブルを手動で散歩に下降せずに、Win32 APIのであり、そのようなものですか?逆に、私が問題を過剰に考えているなら、win32上でlibc関数を名前で検索する方が簡単ですか?
これはどのように正確に役立ちますか? –
私は何が欠けていますか? –
これは、コードアドレスからモジュールハンドルを見つけるためのよく知られたショートカットです。モジュールはWindowsの16ビット版からの日付を返します.32ビット版と64ビット版のWindowsでは、モジュールハンドルは単純にメモリ割り当てのベースアドレスです。私はこれが失敗したのを見たことがなく、私のコードで同じトリックを使用しています。 –