アドレス空間とは(全体像)
メモリには、データを置く場所ごとに「番地(アドレス)」が振られている。プログラムが使えるこの番地の全範囲がアドレス空間だ。番地が多いほど、より多くのメモリを扱える。
身近にたとえると、街の住所体系。番地の桁数(ビット数)が増えるほど、表せる住所が一気に増えて、大きな街を作れる。
押さえるのは、ビット数で扱える容量が決まること。そして、配置をわざとバラバラにして攻撃を防ぐASLRというしくみがあること。
詳しく:32/64ビットの容量差とASLRだけ覚えれば戦える
ここが記事の心臓部。まずビット数による容量差を見ましょう。
32ビットと64ビットの容量
| 種別 | 理論上の最大 | 実際の上限 | 状況 |
|---|---|---|---|
| 32ビット | 2の32乗=約4GB | 約4GB | 古い世代 |
| 64ビット | 2の64乗=16EB | 48ビット=256TB | 現代の主流 |
ここで一番のひっかけが「64ビットは2の64乗(16EB)をそのまま実際に使える」という誤解。実際の上限は48ビット=256TB。これはハードウェアの実装上の判断で、それでも数十年は足りる広さだ。
次に、セキュリティのしくみASLR(Address Space Layout Randomization=配置のランダム化)。
ASLR(配置のランダム化)
| 項目 | 内容 |
|---|---|
| やること | データやライブラリの置き場所を毎回ランダムに変える |
| ねらい | 攻撃者が「ここを狙えば良い」と決め打ちできなくする |
| 効果 | バッファオーバーフロー攻撃などをやりにくくする |
ここで2つめのひっかけが「ASLRがあれば絶対安全」という誤解。配置を漏らす別の弱点と組み合わされると破られることがある。ASLRはあくまで守りの一枚で、DEP(データ領域でコードを動かせなくする)などと重ねて使う。
わかりやすく言い換えると
要するに、街の住所と防犯でイメージするとラクです。
①32ビット … 番地が少ない小さな街(約4GB)
②64ビット … 番地がけた違いに多い巨大な街(実用256TB)
③ASLR … 自宅の住所を毎回ランダムに変える防犯。「あの家を狙う」と決め打ちさせない
つまり、「容量はビット数で決まる」「ASLRは配置ランダム化(でも万能ではない)」、この2点が試験の急所です。
試験のツボ
🔴 一番出る:32ビットと64ビットの容量差
①32ビットは約4GBまで
②64ビットは理論16EB・実用は48ビット=256TB(現代の主流)
🔴 次に出る:ASLR
①データやライブラリの配置を毎回ランダムに変えるしくみ
②攻撃者の決め打ちを防ぎ、バッファオーバーフロー攻撃などを緩和する
🟡 押さえると安定:ASLRは万能ではない/重ねて守る
①別の弱点と組み合わされると破られることがある
②DEPやスタックカナリアなどと重ねて使うのが現代の標準
よくある間違い
①「64ビットは2の64乗(16EB)をそのまま実際に使える」→ ✗ 実際の上限は48ビット=256TB。理論値と実用値は違う。
②「ASLRさえあればどんな攻撃も絶対に防げる」→ ✗ 配置を漏らす別の弱点と組み合わされると破られることがある。守りの一枚。
③「32ビットでも数百TBのメモリを1つのプログラムで扱える」→ ✗ 32ビットの上限は約4GB。大容量は64ビットが前提。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(32/64ビットの容量差)
アドレス空間の容量に関する次の記述のうち、正しいものはどれか。
- 32ビットも64ビットも扱える容量はまったく同じで、どちらも約4GBが上限だとされているものだ
- 32ビットは数百TBまで扱え、64ビットより大きな容量を扱えるものだとされているものである
- 32ビットは約4GBまで、64ビットは実用256TBで、いまの主流は64ビットのほうである
- アドレス空間の容量はビット数とは無関係で、いつも決まった一定の値だとされているものである
解答は 3 ですよ。
32ビットは約4GBまで、64ビットは理論16EB・実用は48ビット=256TBですね。容量はビット数で決まり、いまの主流は64ビットです。
選択肢1の「同じ容量」、選択肢2の「32ビットが大きい」、選択肢4の「ビット数と無関係」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 32と64で容量がまるで違う |
| 2 | ✗ | 32ビットは約4GBが上限 |
| 3 | ✓ | 4GB対256TB・主流は64ビット |
| 4 | ✗ | 容量はビット数で決まる |
オリジナル問題2(ASLR)
ASLRに関する次の記述のうち、正しいものはどれか。
- ASLRは画面の明るさを自動で変える機能のことで、セキュリティとは無関係だとされている
- ASLRはデータやライブラリの配置を毎回ランダムに変え、攻撃者の決め打ちを防ぐしくみだ
- ASLRはメモリの容量を2倍に増やす機能のことで、配置とは関係がないものだとされている
- ASLRはプログラムの実行を必ず速くする機能で、攻撃の緩和とは関係がないものだとされる
解答は 2 ですよ。
ASLRは、データやライブラリの配置を毎回ランダムに変えて、攻撃者の決め打ちを防ぐしくみですね。これでバッファオーバーフロー攻撃などをやりにくくします。
選択肢1の「画面の明るさ」、選択肢3の「容量を2倍」、選択肢4の「必ず速くする」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 画面の明るさ調整ではない |
| 2 | ✓ | 配置をランダム化し攻撃を防ぐ |
| 3 | ✗ | 容量を増やす機能ではない |
| 4 | ✗ | 速くする機能ではない |
オリジナル問題3(64ビットの実用上限とASLRの限界)
アドレス空間とASLRに関する次の記述のうち、正しいものはどれか。
- 64ビットの実用上限は256TBで、ASLRも別の弱点と組み合わされると破られることがある
- 64ビットは理論の16EBをそのまま使え、ASLRがあればどんな攻撃も絶対に防げるとされている
- 64ビットの上限は約4GBで、ASLRは配置を固定して必ず同じ場所に置くしくみだとされている
- 64ビットの上限は決まっておらず、ASLRはメモリを掃除する機能のことだとされているものだ
解答は 1 ですよ。
64ビットの実際の上限は48ビット=256TB(理論の16EBそのままではない)。ASLRも、配置を漏らす別の弱点と組み合わされると破られることがあるので、DEPなどと重ねて守りますね。
選択肢2の「16EBそのまま・絶対安全」、選択肢3の「上限4GB・配置固定」、選択肢4の「上限なし・掃除機能」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 実用256TB・ASLRは万能ではない |
| 2 | ✗ | 実用は48ビット・ASLRは絶対安全ではない |
| 3 | ✗ | 上限は256TB・ASLRは配置をランダム化 |
| 4 | ✗ | 上限はあり・掃除機能ではない |
まとめ
押さえどころ
- 🔴 容量はビット数で決まる = 32ビットは約4GB、64ビットは理論16EB・実用256TB(48ビット)。主流は64ビット。
- 🔴 ASLR = 配置を毎回ランダム化して攻撃者の決め打ちを防ぐ。バッファオーバーフロー攻撃の緩和に効く。
- 🟡 ASLRは万能ではない = 別の弱点と組み合わされると破られる。DEPなどと重ねて守るのが現代の標準。
次に学ぶ
執筆: SikakuQuest編集部