0

私が見つけたアプリケーションのメモリ ロケーションのベース アドレスは、構文"application_name.exe" + 0007856(<- またはその他の数値、これは単なる例です) でした。"application_name.exe"私の質問は、 C++ でアドレスを見つけるにはどうすればよいですか? よくわかりませんが、これは私が使用した方法でした:

HANDLE proc_handle = OpenProcess(//parameters go here to open the process);
void * base_add = (void*)proc_handle;    //to store the address of the process

その方法が正しければ、アプリケーションのアドレスを取得する方法について最初に尋ねた質問に対する回答が得られ、2 番目の質問につながります。特定のメモリ位置のベース アドレスが だったので、"application_name.exe" + 0007856これを実行できますか?:

DWORD specific_memory_base_add = (DWORD)base_add + 0x0007856

から見つけたアドレスを使用して、それをusing"application_name.exe"に追加できますか? 試してみましたが、うまくいかないようです。それが正しくない場合、正しい方法は何ですか?0x0007856+

4

2 に答える 2

2

別のプロセス内のモジュールのベース アドレスを取得するには、プロセスのモジュールを列挙し、モジュール名を取得して一致を見つける必要があります。

プロセス呼び出しにロードされたモジュールを列挙しますEnumProcessModulesGetModuleBaseNameモジュールのリストを取得したら、探しているモジュール (application_name.exe) を見つけるために各モジュールを呼び出します。このHMODULEモジュールの は、モジュールの先頭への (ターゲット プロセスのアドレス空間内の) ポインターであり、ベース アドレスです。これを使用してオフセットを追加できます。

于 2013-10-28T02:09:34.390 に答える
0

Windows について話していると仮定すると (タグ付けする必要がありますwinapiか?)、ロードされたモジュールのベース アドレスを で取得できますGetModuleHandle()。モジュールは、ロードされるまでベースアドレスを持ちません (リンカーは優先ベースアドレスを指定できますが、ローダーはこれを使用/尊重する必要はありません)。

于 2013-10-28T00:17:13.363 に答える