起動するたびにランダムなベース アドレスを持つ .exe のベース アドレスを取得する必要があります。私はこれを試しましたが、うまくいかないようです:
int Base = (DWORD)GetModuleHandle("Test.exe");
なにが問題ですか?
別のプロセスのベースアドレスを取得しようとしているようです。残念ながら、GetModuleHandle
現在のプロセスのモジュールに対してのみ機能します。目標を達成するには、PSAPI を使用するかCreateToolhelp32Snapshot
、別のプロセスのモジュール リストを抽出する必要があります。ベースアドレスはリストにあります。
起動するたびにランダムなベース アドレスを持つ .exe のベース アドレス/エントリ ポイント アドレスを取得する必要があります。プログラムは ASLR を使用します。
...
これを使用して、正しいプロセス内のメモリの特定のチャンクを編集します
別のプロセスにデータを書き込むにはWriteProcessMemory()
、 を使用する必要があります。これには、書き込み先のプロセスを開く必要がありますHANDLE
。
、リクエスト、およびパーミッションをHANDLE
使用してそれを取得します。入力としてプロセス ID を受け取ります。これは次から取得できます。OpenProcess()
PROCESS_VM_OPERATION
PROCESS_VM_WRITE
OpenProcess()
CreateToolhelp32Snapshot()
/ Process32First()
/Process32Next()
EnumProcesses()
.WTSEnumerateProcesses()
プロセスの列挙およびすべてのプロセスの列挙 を参照してください。
書き込み先のプロセスのベース アドレスを特定する必要はありません。システムにその情報を追跡させます。必要なのはHANDLE
プロセスへのオープンさだけです。