そのため、DLLを挿入して(Detoursを使用して)別のアプリケーションを起動するアプリケーションがあります。エントリポイントはDllMainです。私はDllMainから多くを行うことができず、確かにループすることはできません。では、DLLモニター関数をx秒ごとに呼び出すにはどうすればよいですか?DllMainからスレッドを作成することはできません(少なくともそれが戻るまで)、そしてそれが私をクラッシュさせたので本当です。そこで、attach threadイベントで作成しようとしましたが、クラッシュしました。だから今私がやろうとしているのは、モジュールハンドルを取得できるように(迂回が失敗した場合に)それを再度注入することです。次に、スレッドを作成する初期化関数のアドレスを取得します。モジュールハンドルは正常に取得できますが、関数アドレスを取得できないと思います。関数を空にしましたが、それでもクラッシュしました。そのため、関数を呼び出すことすらできません。Visual Studioによると、読み取りアクセス権がありません。
それで、私は何をすると思いますか?アタッチされたプログラム(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);
関数StarterはexternCでエクスポートされ、正常に検査されているように見えます(序数1)。
何が間違っているのかわかりません。誰かがこのトピックを経験してクラッシュしたことを願っています。
DLLコードは次のとおりです。
//Hook.h
extern "C"
{
void __declspec(dllexport) Starter(void);
}
//Hook.cpp
void Starter(void)
{
}
ありがとう