0

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

4

3 に答える 3

3

これは、コンパイルされたコード自体の静的分析から知るのは非常に困難です。静的に初期化されたデータ領域と、静的に初期化されていない (BSS) セクションを確認できるはずですが、スタック、ヒープなどに関してそれらがどのようにロードされるかは、プラットフォームの実行可能ローダーに依存します。

于 2011-02-03T13:44:08.587 に答える
0

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

于 2011-02-05T05:45:44.107 に答える
0

組み込みプラットフォームで作業している場合は、おそらくプログラムのビルドと共にいくつかのリンカー スクリプト (lcf ファイル) を使用する必要があります。そうすれば、すべてのセクション (スタック、ヒープ、intvec、bss、テキスト、コード)、その配置を詳細に特定できます。メモリ内 (L1 キャッシュ、L2 キャッシュ、または DDR) と、ボードへのロード中の開始/終了アドレス。

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

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

于 2011-02-04T06:57:12.313 に答える