0

論理アドレスを使用して分析を試みています。次のプログラムは私の動機を説明しています...

#include<stdio.h>

int main()
{
int x=10;
printf("The address of main is %p\n",&main);
printf("The address of x is %p\n",&x);

return 0;
}

このプログラムを 32 ビット システムで実行すると、次のように表示されます。

The address of main is 0x80483b4
The address of x is 0xbfe3b1e0

size page_size
text    data     bss     dec     hex filename
 993     260       4    1257     4e9 page_size

getconf PAGESIZE
4096

論理アドレスをページサイズに関連付けたい..この論理アドレスがどのように作成されるかを言いたい(オフセット、ページ、データに関して)

このプログラムのサイズは 1257 バイトですが、ページ全体が読み込まれると思います (間違っていたら訂正してください) ページ全体が読み込まれるか、1257 バイトだけが読み込まれるかを確認する方法はありますか

矛盾がある場合に備えて、私の質問が明確であることを願っています。ありがとう

4

2 に答える 2

0

覚えておく必要のあることが2つあります。1つは、メインを構成する命令のアドレスを取得し、2つ目は、実行中のプログラムに必要なスタックスペースを取得することです。mainのアドレスは命令スペースにあり、xのアドレスは実際にはスタック上にあります。

于 2009-12-08T17:25:48.460 に答える
0

バイナリ プログラムがオペレーティング システムにどのように読み込まれるかについて、もっと学んでおいたほうがよいでしょう。バイナリのさまざまなセクションがさまざまなページに読み込まれます。

ファイル /proc/[proc-id]/maps を読み取ってみてください。このような問題についてより多くのアイデアが得られます。

また、ELF 形式も役立つことを学びます。

于 2009-12-08T17:01:44.763 に答える