5

私は今しばらくの間抱えている問題について考えています。メモリ(スタック、ヒープ、すべて)にアクセス(値の読み取り/変更)できるC / C ++プログラム(最初はWindowsの下)を作成したいと思います。他の実行中のプログラム。(共有メモリとは異なり、コンピュータにあるメモリです。)自分のアプリケーションからアプリケーションを起動する必要はありません。以前にこのようなものを見たことがありますが、それがどのように行われるのか理解できません。実行中のプログラムのメモリにアクセスすると、OSからエラーが発生しますか?どんな助けでも大歓迎です!

4

3 に答える 3

8

@sharptooth が言ったように、これには OS のサポートが必要です。OSが異なれば、その方法も異なります。Windows を使用しているため、いくつかの手順に従うことができます。

  1. OpenProcessまたはを呼び出して、CreateProcess新しいプロセスにアクセスまたは起動します。この呼び出しでは、PROCESS_VM_READアクセスを要求する必要があります。
  2. ReadProcessMemoryその開いているプロセスでメモリのチャンクを読み取るために呼び出します。

別のプロセスのメモリを変更したい場合は、それを達成するためにPROCESS_VM_WRITEアクセスして使用する必要があります。WriteProcessMemory

たとえば、Linux では、ptrace を使用してプロセスにアタッチし、そのメモリを覗き見します。

于 2011-05-16T10:47:49.323 に答える
2

独自のアプリケーションからプロセス (別のプログラム) を開始し、その情報の一部 (特に共有メモリ) にアクセスできます。逆は非常に困難です.CPUはメモリアドレスを偽造するため、各プロセスはメモリ全体が利用可能であると信じています...

于 2011-05-16T10:43:34.943 に答える
0

関数を見てみることに興味があるかもしれませんToolhelp32ReadProcessMemory

于 2011-05-16T10:42:01.147 に答える