私はDLLを注入して別のアプリケーションを起動するアプリケーションを持っています(Detoursを使用)。エントリポイントはDllMainです。私はDllMainから多くを行うことはできませんし、確かにループすることはできません。だから私は毎秒私のDLLモニタ関数を呼び出すのですか? DllMainからスレッドを作成することはできません。だから私はスレッドのイベントを添付して作成しようとしたと私はクラッシュした。だから今私がやろうとしているのは、モジュールハンドルを得るために、再度注入することです(Detoursが失敗した場合)。次に、スレッドを作成する初期化関数のアドレスを取得します。私はモジュールをうまく処理するが、私は関数のアドレスを取得できるとは思わない。私はその機能を空にしたが、それでも私は墜落した。だから、それは関数を呼び出すまでは得られません。 Visual Studioには私には読み取りアクセス権がないと言われています。内部にDLLを注入してループしますか?
私は何をすると思われますか?あなたは、あなたが付属のプログラム(exe)を所有していないときにあなたのDLL機能をループするために何をしますか?
//Application.exe
STARTUPINFO si = {sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi = {0};
DetourCreateProcessWithDll(filename, NULL, NULL, NULL, TRUE,
CREATE_DEFAULT_ERROR_MODE | CREATE_SUSPENDED, NULL, path,
&si, &pi, detoured, hook, NULL);
processID = pi.dwProcessId;
hDll = InjectDLL(processID, hook);
if(hDll != NULL)
{
STARTER Starter = (STARTER)GetProcAddress(hDll, "Starter");
if(Starter != NULL)
Starter();
}
ResumeThread(pi.hThread);
ファンクションスターターはエクセルCでエクスポートされ、細かく検査されます(序数1です)。
私はおそらく何が間違っているのか分かりません。ただ、このトピックに関する経験があり、クラッシュすることを願っています。
ここでDLLのコードがあります:
//Hook.h
extern "C"
{
void __declspec(dllexport) Starter(void);
}
//Hook.cpp
void Starter(void)
{
}
おかげ