3

「target.exe」などのターゲット プロセスに dll を正常に挿入した後、「target.exe」のベース アドレスを取得するにはどうすればよいですか?

GetModuleHandle(0) と GetModuleHandle("target.exe") を試しましたが、正しくないようで、デバッグ方法がわかりません。次のように印刷してみました。

//retrive target's base address
DWORD EXEBaseAddr = (DWORD) GetModuleHandle((LPCWSTR)"target.exe");
std::stringstream sstr;
sstr << EXEBaseAddr;
std::string str = sstr.str();
String^ str3 = gcnew String(str.c_str());
baseAddressLBL->Text = str3;

インターフェイスにアドレスを出力するためにWindowsフォームを使用しているため(それが呼ばれているかどうかはわかりません)、最後に再度キャストする必要がありました。

4

2 に答える 2

1

GetModuleHandle(つまり)のワイド バージョンを使用しているGetModuleHandleWため、有効なワイド文字列を渡す必要があります。あなたの間違いは、幅のない文字列を幅の広い文字列にキャストしていて、うまくいかないことです。代わりに次を使用します。

(DWORD)GetModuleHandleW(L"target.exe");

または、同じことを達成する次のようにします。

(DWORD)GetModuleHandleA("target.exe");
于 2013-09-01T03:01:56.653 に答える
0

GetModuleHandle(NULL); 現在実行中のプロセスの ID を取得します ;) したがって、コードが target.exe プロセス内で実行されている場合、その API 呼び出しを使用してプロセス ID を取得する必要があります。dll を正常に挿入して呼び出しをジャンプできたと確信していますかあなたのコードに?

コードが機能していることを確信している場合はGetCurrentProcessId();、呼び出しプロセスの ID を取得する関数を使用してみてください:) MSDN で詳細を確認してください。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683180(v=vs.85).aspx

于 2013-09-01T02:00:23.347 に答える