1

Linux メモリ マップのどの領域にプロシージャが格納されているかを説明するように求める質問があります。この質問では、objdump -h を使用してこの情報を見つけるように指示されています。

さて、「メモリ内の領域」が何を意味するのか少し混乱しています。

特定のプロシージャに対して、使用する特定のレジスタ (%eax、%edx など) があり、変数ごとに、それが格納されているメモリ位置 (8(%ebp) など) があることを知っています。さらに、スタックを「処理」するための %esp および %ebp レジスタがあることもわかっています。

ファイルに対して objdump -h も実行しますが、得られた情報からは具体的なことはわかりません。

では、使用されているレジスターと、このプロシージャーの変数が保管されているメモリー・アドレスについて言及する必要がありますか?

4

2 に答える 2

3

あなたの質問は、オペレーティング システムによってロードされたときに、実際のコードがメモリ内に存在するようにリンカが指定した場所を尋ねていると思います。%EIPこのコード領域は、プログラム カウンター レジスタまたはx86で表されます。

通常、Linux では、プログラム コードと読み取り専用変数は、プロセス用にマップされたメモリの下位領域に格納され、スタックは上位領域に格納されます (つまり、スタックは下に成長します)。

于 2012-10-02T00:36:07.613 に答える
0

Linux メモリ マップのインターネット検索を簡単に行うことができます。結局のところ、それは宿題であり、問​​題の解決方法と調査の方法を学ぶことができます。

各プログラムには特定のセグメントがあります。いくつかを次に示します。 bss - 初期化されていないデータ データ - 初期化されたデータ (文字列、配列など...)

セクションは、プログラムの開始アドレスに関連しており、正または負のオフセットがあります。

ここに良いページがあります: http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory

于 2012-10-02T00:39:51.900 に答える