2010-11-26 7 views
2
  • どのように私はアクセス違反を引き起こすことなく達成することができますか?

boolポインタを特定の開始位置に設定してから、それを段階的に増やしてみました。これにより、アクセス違反が発生します。C++:ダンプRAMの内容

私はVisual Studio 2010を使用しています。

+1

どのような目的のためにですか? –

+0

私は不思議です:)セキュリティのトピックにもアクセスしています。実行中のプログラムのコードを操作する – Lederp

+0

その質問は意味をなさない。 Win32では、プロセスに常に__4GBの仮想メモリが割り当てられます__。これらの4GBのすべてがハードウェアでバックアップされるわけではありません(明らかに、Win32は合計4GB以上にアクセスすることができないため、プロセスだけでは実行できません)。プロセスのメモリの半分はOS用に予約されているため、コードでアクセスしてはいけません。 – sbi

答えて

1

OS固有です。ウィンドウの場合、VirtualQuery()を使用して、「読み取り可能な」メモリーページのマップを取得できます。

+0

バッファオーバーフローはどのようにしてすぐにプログラムをクラッシュさせることなく動作しますか?たとえば、JavaScriptの文字列を利用すると – Lederp

+2

@Lederp:これはまったく別の質問です。元のものと大雑把には関連しています。 – sbi

+0

@Lederp:あなたのプロセスのメモリ空間には他にも多くのものがあります。方法や場所を知っていれば、クラッシュすることはありません。 ASLRが導入された理由の1つです。 – ruslik

1

MiniDumpWriteDump()を使用してダンプファイルを作成し、好奇心が強いことがあるので、それを調べることができます。

9

Windowsは仮想メモリオペレーティングシステムです。つまり、ある時点でRAMにキャッシュされているかどうかに関わらず、ソフトウェアが「メモリ」を扱うことを意味します。かなり多くのプロセスメモリがおそらくディスクに格納されています - ページファイル、またはファイルマッピングの一部として。

"RAMをダンプする"から "ダンプする"にダウングレードする場合は、自分自身に "どのメモリ"を要求する必要があります。

仮想メモリOSであることに加えて、Windowsはアプリケーションを互いに保護します。各プロセスはメモリ用に独自のプライベートアドレス空間を取得します。だから、ダンプしたいメモリを決める必要があります。私たち自身のプロセス?それは簡単です。 VirtualQueryを使用してブロックを調べ、それらをダンプします。

別のプロセスを見ていますか?それはもっと複雑です。信頼できないアプリケーションがより信頼できるプロセスメモリを調べることを防ぐセキュリティ障壁があります。 VirtualQueryExでは、十分な権限があれば、別のプロセスを調べることができます。

最後に、カーネルメモリを調べるには、何らかの種類のドライバを開発する必要があります。Usermodeコードでは、カーネルメモリをまったく調べることはできません。

+0

'+ 1'は非常に混乱した質問に対する素敵で包括的な答えです。 – sbi

1

@ Johnの回答をフォローアップするには、メモリや実行中のプロセスの状態を調べるには、実際にthe DbgHelp APIについて学ぶ必要があります。これは簡単な作業ではなく、基本的にあなた自身のデバッガを書くことです。

Johnが提案した単純なミニダンプは、同じ労力を必要とせず、プロセス状態のスナップショットを検査するのに適しています。

関連する問題