2011-02-03 13 views
0

メモリのどの部分をヒープ、スタックなどで調べるのですか?私は現在、C言語のプログラムを見ています。.elfファイルを見ると、プログラムが使用しているメモリアドレスを見ることができますが、ヒープやスタックにあるかどうかはわかりません。Cでのメモリ割り当て

+0

正確にどのプラットフォームを使用していますか? –

答えて

3

これは、コンパイルされたコード自体の静的解析からは分かりづらいです。静的に初期化されたデータ領域、および静的初期化されていない(BSS)セクションも見ることができるはずですが、スタック、ヒープなどに関してロードされる方法は、プラットフォームの実行可能ローダに依存します。

0

埋め込みプラットフォームで作業している場合は、プログラムのビルドに加えてリンカスクリプト(lcfファイル)を使用して、スタック、ヒープ、intvec、bss、テキスト、コード)、メモリへの配置(L1キャッシュ、L2キャッシュ、またはDDRのいずれか)、およびボードにロード中の開始/終了アドレス。

lcfのキーワードを正しく理解するために、リンカーのマニュアル(コンパイラのインストールディレクトリにあります)を見てください。

また、セクションを分析するもう1つの方法があります。プロジェクトの「マップファイル」を作成し、それを調べることができます。プログラム内のすべてのセクションとそのアドレスがリストされます。

0

無料のデバッガであるollydbgを試してみることができます。この欠点の1つは、アセンブリ形式のすべてを表示することですが、スタック内の内容、ヒープ、さらにはレジスタ内の内容を表示します。これがあなたが探しているものなのかどうかは分かりません。

+0

すべてのプラットフォームをサポートしていますか? –

+0

私はUnixシステムのどこでそれを書いたのか分からなかった。謝罪します。残念ながらウィンドウ上でしか動作しません。しかし、私はほとんどのデバッガ/ディスアセンブラは本質的に同じことをすると仮定しますが、これは前に使用した唯一のものです。 –