よく本で。論理アドレス → リニアアドレス(仮想アドレス)→ 物理アドレス
という順で変換しています・・・・みたいに書いてあるのですが、
1、セグメントで分割しているというのは、プログラムの内部単位ぐらい細かく分割しているのでしょうか??
例えば、 readelf --segments hello のコマンドを打って出てくるセグメントとメモリを分割しているセグメントとは別物でしょうか?
2、現在のLinux,WindowsなどのOSはセグメント方式とページング方式の両方を採用しているのでしょうか?
時々、「現在のOSはセグメント方式は採用されていません。」という情報を目にするのですが・・・
結局のところどうなんですか?
3、objdump -d hello のコマンドで出てくるアセンブリコードの右側に出てくるアドレスというのは論理アドレスですか? リニアアドレスですか?
00000000004003e0 printf@plt:
4003e0: ff 25 12 05 20 00 jmpq *0x200512(%rip)
4003e6: 68 00 00 00 00 pushq $0x0
4003eb: e9 e0 ff ff ff jmpq 4003d0 <_init+0x28>
4、リニアアドレスと論理アドレスとは、結局何が違うのでしょうか?
int s = 9;
printf("%x", &s);
このプログラムで見ることができるアドレスはリニアアドレスの方であっていますか?
どなたかお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/22 12:04
2016/09/22 12:22
2016/09/22 13:00
2016/09/22 13:04