問題なく動作するdllインジェクションプログラムを作成しました。dll をリモート プロセスにロードし、何らかの関数を呼び出します。今、私はその関数に引数を渡したいです。CreateRemoteThread にはそのための lpParameter がありますが、関数で使用するために dll 内で渡された引数を取得する方法は?
更新: dll エントリ ポイントは一般的です:
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
DLL には、次のプロトタイプを持つ関数が 1 つだけ含まれています。
void TestFunction(const char* ua);
その関数を呼び出すコードは次のとおりです。
CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)((void*)codecaveExecAddr), (LPVOID)argumentAddress, 0, NULL);
ご覧のとおり、TestFunction 内で「テスト」文字列を渡そうとしています。しかし、その後、いくつかのゴミが含まれている TestFunction 内の ua 引数をチェックします。
プロジェクト ファイル全体は次のとおりです。
http://pastebin.com/gh4SnhmV
http://pastebin.com/Sq7hpSVx
http://pastebin.com/dvgXpUYz
更新 2
TestFunction には特定のプロポタイプが必要ですか、それとも LPVOID タイプのパラメーターが 1 つしかない限り、どれでも使用できますか? よくわかりません。注入された dll の関数を引数で呼び出す方法の例を教えてもらえますか?