質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

Q&A

解決済

3回答

4833閲覧

なせスタートアドレスが0x400000なんですか?

strike1217

総合スコア651

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

0グッド

2クリップ

投稿2016/09/17 09:58

gccでコンパイルしたプログラムを見てみるとどれも0x400000から開始されていました。
なぜ4なんですか??

32bitだと8みたいですが・・・

以下のようなurlを見たのですが・・・
http://stackoverflow.com/questions/14314021/why-linux-gnu-linker-chose-address-0x400000

なぜ0x400000にしたのかよくわかりません。
教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

0x400000 であるのは明確な理由があります。これは、ラージページモードでの最大のページサイズと同じになっています。
最初の一ページはNULL参照をキャッチするために、使用することはできません。そのため、どんなラージページモードにも対応できるように0x400000からスタートするようになっているのです。

投稿2016/09/26 16:28

katsumiy

総合スコア479

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2016/09/27 01:45 編集

ラージページモード?? そのようなものがあるのですか! 調べてみますね。 ありがとうございます。 すごいですね〜〜
strike1217

2016/09/27 01:57 編集

ページング方式の”ページ”なんですかね? 「large」ということは固定長のページ単位と言っても大きさは複数あるということですかね?
guest

0

ベストアンサー

なぜ0x00400000にしたかと言うのは具体的に答えられませんが、
Linux, Unix系やWindowsに限らずParOSと呼ばれる独自OSでも0x00400000が実行ファイルのスタートアドレスとして指定されています。

コンパイラによっては変更することができるようです。

/BASE オプションの利用 プログラムのベース・アドレスを設定し, 実行形式ファイルまたは DLL の基本場所を置換します (実行形式ファイルでは 0x400000,DLL では 0x10000000)。 https://jp.xlsoft.com/documents/intel/cvf/vf-html/pg/pg04_02_04.htm

「memory map 0x00400000」などで検索すると色々ヒットします。

0x400000: 実行ファイルの実行可能領域 0x600000: 実行ファイルの実行不可領域 0x602000: ヒープ領域 0x7ffff7a1a000: 共有ライブラリ(libc) 0x7ffffffde000: スタック領域

2016/09/18 09:23 AM (雑記追記)

私もこの質問を見てなぜ0x00400000なのか気になりましたが、
HogeAnimalLover様が書かれている通り「作った人がそう決めたから」という筋が大いにありそうですね。
0x003FFFFFまではシステム領域として確保しておけば足りるだろうなどと考えたのかと推測します。

似た話でWake-on-LanのマジックパケットのMACアドレスを何故16回繰り返すのかというのもあります。
「16回でなく、15回でも、17回でも、32回でもよかったんじゃないか…」といった話です。
おそらく作者が「16回MACアドレスを繰り返せば他のパケットと偶然一致することはないだろう」などと考え、仕様を制定したのかと推測します。

参考文献

ELF実行ファイルのメモリ配置はどのように決まるのか - ももいろテクノロジー
http://inaz2.hatenablog.com/entry/2014/07/27/205913

ParOS - 15ページ目
https://www.toppers.jp/docs/tech/park/PartitionOS_SafetyConcept.pdf

windowsにおいて、デバッグソフトを用いて実行中のプロセスをアタッチし... - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10131267615

投稿2016/09/17 10:57

編集2016/09/18 00:24
aglkjggg

総合スコア769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2016/09/17 11:06

ほぇぇぇぇ・・・ そうなんですか! ありがとうございます
guest

0

言語の文法で定められていることではないですね。特に論理的な根拠はないと思います。多分OSやコンパイラの仕様によるものですね。要するに「作った人がそう決めたから」の話です。それ以上は「作った人でなければわからない」と思います。

投稿2016/09/17 14:27

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2016/09/18 01:12

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問