COREWAR

/
Step 14: なぜ「DAT」が爆弾になるのか?
🎯JMPを無くしてDATに突入させ、プロセスのクラッシュを確認する(1/1)

ミッション一覧 (全30ステップ)

第1章:画面とメモリの基本 (1-6)
BASIC★☆☆
Step 1: 時間を進める「STEP」ボタン
🔒
BASIC★☆☆
Step 2: プロセスの停止と「RESET」での復旧
🔒
BASIC★☆☆
Step 3: 「編集できる状態」と「実行中の状態」EDIT
🔒
BASIC★☆☆
Step 4: メモリの箱の3つの部屋(右の部屋 B を変える)EDIT
🔒
BASIC★☆☆
Step 5: 左の部屋(A)と右の部屋(B)を書き換えるEDIT
🔒
BASIC★☆☆
Step 6: 「数値(#)」と「番地($)」の記号の違いEDIT
第2章:代表的な命令とループ (7-13)
🔒
ARITHMETIC★☆☆
Step 7: 足し算の命令「ADD」の観察
🔒
ARITHMETIC★☆☆
Step 8: 足す「数値(A)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 9: 足す「相手の場所(B)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 10: 引き算の命令「SUB」を使ってみようEDIT
🔒
BASIC★☆☆
Step 11: 箱を丸ごとコピーする命令「MOV」EDIT
🔒
CONTROL★☆☆
Step 12: 時間を巻き戻すジャンプ命令「JMP」EDIT
🔒
CONTROL★☆☆
Step 13: 簡単なプログラムを作ろう(自動カウンター)EDIT
第3章:ノイマン型とデジタル生命 (14-18)
🔒
BASIC★☆☆
Step 14: なぜ「DAT」が爆弾になるのか?EDIT
🔒
BASIC★☆☆
Step 15: 自分自身の命令をコピーする(コード=データ)EDIT
🔒
BASIC★☆☆
Step 16: お手本観察:最古の生命体「Imp」をSTEP実行する
🔒
BASIC★☆☆
Step 17: Impの簡単な変更(コピー先の観察と実験)EDIT
🔒
ARITHMETIC★★☆
Step 18: 間接参照(@ポインタ)の仕組みを知るEDIT
第4章:伝統的アルゴリズム (19-24)
🔒
STRATEGY★★☆
Step 19: お手本観察:爆撃機「Dwarf」をSTEP実行で解剖する
🔒
STRATEGY★★☆
Step 20: Dwarfの簡単な変更(爆弾の間隔を変える)EDIT
🔒
STRATEGY★★☆
Step 21: 実戦デビュー:爆弾の間隔を調整して標的を破壊せよEDIT
🔒
CONTROL★★☆
Step 22: お手本観察:分裂命令「SPL」と増殖の仕組み
🔒
CONTROL★★☆
Step 23: お手本観察:条件比較命令「SEQ / CMP」で敵を探すEDIT
🔒
STRATEGY★★☆
Step 24: お手本観察と変更:防衛罠「Imp-Gate」でImpを止めろEDIT
第5章:実戦改造と総合演習 (25-30)
🔒
STRATEGY★★☆
Step 25: 【Stone(石)】高速爆撃機の観察とステップ幅の改造EDIT
🔒
STRATEGY★★☆
Step 26: 【Paper(紙)】自己複製スウォーム「Mice」を観察する
🔒
STRATEGY★★★
Step 27: 【Paperの改造】クローン投下距離を変更して増殖せよEDIT
🔒
STRATEGY★★☆
Step 28: 【Scissors(鋏)】索敵スキャナーの観察とスキャン間隔の改造EDIT
🔒
STRATEGY★★★
Step 29: 【Trap(罠)】敵の魂を誘拐する「Vampire」の観察と改造EDIT
🔒
STRATEGY★★★
Step 30: 卒業試験:愛機のチューニングと総合バトルEDIT
🟢 編集モード(セルをクリックして変更できます)
[番地][命令 (Opcode)][A (左の値)][B (右の値)]
📦 データ領域 / 爆弾 (DAT)
0000
▼MOV
#
$
0001
▼MOV
<
<
👈 ここを変更
0002
↺JMN
$
$
0003
❖SPL
@
#
0004
+ADD
#
$
0005
↺JMP
$
$
0006
■DAT
$0
$0
++ 命令を追加
0007
■DAT
$0
$0
0008
■DAT
$0
$0
0009
■DAT
$0
$0
0010
■DAT
$0
$0
0011
■DAT
$0
$0
0012
■DAT
$0
$0
0013
■DAT
$0
$0
0014
■DAT
$0
$0
0015
■DAT
$0
$0
0016
■DAT
$0
$0
0017
■DAT
$0
$0
0018
■DAT
$0
$0
0019
■DAT
$0
$0
0020
■DAT
$0
$0
0021
■DAT
$0
$0
0022
■DAT
$0
$0
0023
■DAT
$0
$0
0024
■DAT
$0
$0
0025
■DAT
$0
$0
0026
■DAT
$0
$0
0027
■DAT
$0
$0
🏟️ARENA (20 ROWS)SCOPE: 0000 - 0019
[メモリ空間 800番地 (20行 × 40列)]左のエディタと1対1で同期
TASKS: 0
CYC: 0
📖 講義ノート // STEP 14 OF 30第3章:ノイマン型の覚醒とデジタル生命の原理⏱ 読了目安:約6分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

ノイマン型計算機の宿命と「DAT爆弾」——なぜ現代のOSにはDEP(データ実行防止)があるのか?

命令とデータが同じメモリに区別なく置かれる構造が生み出した、CoreWarの爆弾と現実世界のバッファオーバーフロー攻撃の共通原理

#Von Neumann Architecture#Stored-Program Concept#DAT Bomb#Buffer Overflow#DEP / NX Bit
🔬Step 14: なぜ「DAT」が爆弾になるのか?

第3章では、現代のすべてのコンピュータの土台である 「ノイマン型アーキテクチャ」 の秘密に迫ります。 ノイマン型では、「命令」も「データ(DAT)」も区別なく同じメモリに並んでいます。

もし先ほどのカウンターで、2行目の JMP 命令が壊れて無くなったらどうなるでしょうか? 実行ポインタは止まれずに3行目の DAT(データ箱)へ突っ込み、即座に死んでしまいます。 つまり CoreWar では、「ただのデータ(DAT)を敵のコードの上に投げつけると、踏んだ敵が即死する『データ爆弾』になる」 のです!

🎯 やってみよう 2行目(0001 番地)の命令を JMP から ADD に変えてジャンプを無くし、[STEP] を3回押してポインタを 0002 番地の DAT に突入・クラッシュさせる実験を行いましょう!

1. フォン・ノイマンの革命:「プログラム内蔵方式」の光と影

第3章の幕開けとなるStep 14では、2行目(0001番地)の『JMP(ジャンプ)』を『ADD』に書き換えてループを破壊し、プログラムカウンタ(PC)を3行目の『DAT(データ)』へ意図的に突入させてクラッシュさせる実験を行いました。

1945年、数学者ジョン・フォン・ノイマン(John von Neumann)らが起草した『EDVACに関する報告書』によって、現代に至るすべてのコンピュータの基本設計——「ノイマン型アーキテクチャ(プログラム内蔵方式)」が確立されました。その最大の特徴は、「人間が書いた『命令(Code)』と、計算に使われる『データ(Data)』を区別せず、全く同じ1つのメモリ空間に並べて格納する」という点にあります。

それ以前の計算機(ENIACなど)では、プログラムを変更するたびに人間が何百本ものケーブルを物理的に抜き差しして配線を組み替えていました。命令もデータも同じメモリに入れられるようになったことで、コンピュータはソフトウェアを瞬時に切り替えられる万能機械へと進化しました。しかしその一方で、「もしプログラムカウンタ(PC)が道を誤って、命令ではなく『データ(DAT)』が置かれた番地に踏み込んでしまったらどうなるか?」という宿命的な脆弱性を抱え込むことになったのです。

Von Neumann Unified Memory Space:
  [0000] ADD.AB #1, $2   (Code)  ──► Executed by CPU
  [0001] ADD.AB $-1, #0  (Code)  ──► Loop broken! PC falls through...
  [0002] DAT.F  #0, #0   (Data)  ◄── 💥 CPU tries to execute Data ➔ CRASH!

2. なぜ「ただのデータ(DAT)」が最強の爆弾になるのか?

CoreWarには「ミサイル発射」や「レーザー攻撃」といった専用の攻撃命令は1つも存在しません。にもかかわらず激しい戦闘が繰り広げられるのは、このノイマン型アーキテクチャの性質を逆手に取っているからです。

今回の実験で見た通り、順調に動いていたプログラムであっても、ループを支える『JMP』命令が壊されるか、あるいは実行ルートの途中に『DAT(データ)』が置かれると、そこに足を踏み入れた実行ポインタは「不正命令例外(Illegal Instruction)」を起こして即死します。

これを相手(敵Warrior)に対して行うとどうなるでしょうか? あなたが『MOV』命令を使って、自分の手元にあるただのデータ箱(『DAT #0, #0』)のコピーを、敵のプログラムが動いている番地の上へ投げつけたとします。すると、敵の大切な命令が『DAT』に上書きされます。次の瞬間、何も知らない敵のプログラムカウンタがその番地を踏んだ途端、敵のプロセスは自らクラッシュして消滅するのです! つまりノイマン型メモリ空間においては、「無害なデータ(DAT)を敵の実行経路に置くこと」そのものが、踏めば即死する『地雷(データ爆弾 / DAT Bomb)』として機能します。

3. 現実世界の「バッファオーバーフロー攻撃」と現代CPUの「DEP / NXビット」

この「データ領域にデータを書き込むことでプログラムの制御を破壊・乗っ取る」という仕組みは、ゲームの中だけの話ではありません。現実世界のサイバーセキュリティにおいて最も有名な脆弱性である『バッファオーバーフロー攻撃(Buffer Overflow Attack)』と100%同じ原理です!

C言語などで書かれたプログラムにおいて、ユーザーからの入力データ(名前や画像データなど)を保存するメモリ領域(バッファ)の境界チェックが不十分だと、あふれ出したデータが隣の「関数の戻り番地(ジャンプ先)」や「実行コード領域」を上書きしてしまいます。その結果、CPUがデータを命令として実行しようとしてアプリがクラッシュ(Segmentation Fault)したり、悪意ある攻撃者が送り込んだデータを「命令コード」としてそのまま実行して乗っ取られたりする事件が、1988年の「モリス・ワーム」以来、世界中で無数に発生してきました。

このノイマン型コンピュータの本質的な弱点を防ぐため、現代のCPU(Intel / AMD / ARM)とOS(Windows / macOS / Linux)には、『DEP(Data Execution Prevention:データ実行防止)』または『NXビット(No-eXecute bit:実行禁止ビット)』と呼ばれるハードウェア保護機能が必ず搭載されています。これはメモリの各領域に「ここは命令として実行してよい部屋」「ここはデータ(DAT)専用の部屋」という鍵をかけ、データの部屋にプログラムカウンタが突入した瞬間にハードウェアで遮断する仕組みです。CoreWarであなたが体験した『DATクラッシュ』は、まさにこのコンピュータ・セキュリティの最前線の原理そのものなのです。

🔒

🔒 MISSION CLEAR で講義ノートの全編が解放されます

上段の実験シミュレーターでミッションを達成すると自動的に全編がアンロックされます。(下のボタンから今すぐ全文を先に読むことも可能です)