平成生まれの後輩にx86を覚えさせてみた

## はじめに

弊社ではデータの検索サービスを提供しており、今もレガシーなデータベースシステムを保有しております。
中でも独特なのは、いわゆるCの `mmap()` システムコールにより生成された巨大なバイナリファイルによる検索データベースです。
中身は固定長の値を持つ構造体によるバイナリデータです。中堅エンジニアの方であれば固定長と聞くとピンとくるかもしれません。COBOLを彷彿とさせますね。(昭和)

そう、ダンプやデバッグは常であります。

---

## ある日のこと

<img width="640" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/d9d72c26-6baf-b7a8-5ecf-d1859810043a.png">

ワイ　「これがHEXダンプや。わかるか？」
後輩　「わかりません」
ワイ　「**なんやて!?**」
　　　（アカン... これは教育せなアカンやつや）

ワイ　「あとで **特別ミッション** 渡すでー」
後輩　「特別ミッション(((( ；ﾟДﾟ)))」



ワイ　「EC2インスタンス建ててー」
　　　「コードカキカキ...」

　　　(数時間後)

ワイ　「おっしゃできた！」


----

## 特別ミッションをあたえる

ワイ　「ちょっとzoomええか？」
後輩　「部屋立てますね」
ワイ　「今から自分、**バイナリアン**になってもらうで。こんなん作ったから、覚えるやで」
後輩　「ｺﾞｸﾘ...」


↓↓↓↓↓

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/5bc40bfc-7645-4d4f-d93b-09fe9b869ccb.png">

【レギュレーション】

- x86の1バイト命令に対する正しいHEX値(またはその逆)を答える。
- 出題された「命令」または「HEX値」に対する、正しいリンクclickして回答。
- 出題はランダム。

> アセンブラかるたとは、SECCONなどのセキュリティ系イベントで開催された競技です。

### ヒント

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/a2900666-f54f-2c6c-d97a-69cb1288c18d.png">

- 縦がHEXの上位桁、横が下位桁。
- たとえば、0x`06` → `PUSH ES` という命令。
- `POP ECX` → 0x`58` というHEX値になります。

---

## とりあえず、抜き打ちでやらせてみる

### 第1問
- 0x53 に対する「命令」を選ぶ

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/63c87396-8a0d-6f90-0b3a-9abe881d8f5b.png">
↓↓↓↓
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/3fe26a05-3a9c-b593-ed0c-6a63c11782fc.png">
残念、不正解:x:

---

### 第2問
- INC ECXに対する「HEX値」を選ぶ。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/a808e1c2-e51f-9aed-87b2-eabe5732be90.png">
↓↓↓↓
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/5ec4ea26-de00-93d3-4283-facde0772bbe.png">
残念、不正解:x:

---

ワイ　「よっしゃ最初はそんなもんや」
　　　「今から2時間後にテストするから覚えるやで」
　　　「**5問連続**で正解したら合格や」
後輩　「わかりました！」
ワイ　「ほな！」

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/ff84fd85-112a-6d53-6281-a62c94e959f2.jpeg">

---

(2時間経過)

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/aeec435a-f710-37d0-82f0-ee61e13b72b8.jpeg">


---

## テスト開始


ワイ　「時間やで」
後輩　「さ...30秒だけ復習させてください!!」
ワイ　「**なんやて!?**」

　　(30秒経過)

後輩　「準備できました！」
ワイ　「ほないってみよか！」

**※ぜひみなさんもご一緒に!!**

----

### 第1問

<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/d2114ade-5b96-c962-23e2-a12f1b51f796.png">

後輩　「さ..早速、覚えてないところが...(汗」
ワイ　(ﾄﾞｷﾄﾞｷ)
後輩　「消去法で...どっちかですね」

↓↓↓↓↓
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/227435f9-1071-193a-9bac-c8441f75dd8a.png">
正解!!

---

### 第2問

<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/898fa3f1-a4e9-1059-4af0-74c360e78c59.png">

後輩　「また、運悪く覚えてないやつが...(汗」
ワイ　(ﾄﾞｷﾄﾞｷ)

<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/74dcd140-44eb-bd35-e8a5-9237ae016297.png">
正解!!

---

### 第3問

<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/82af385d-47bf-0a8b-c96d-9a0a053b4ad1.png">

後輩　「あ、これは覚えました♪」
ワイ　(ﾄﾞｷﾄﾞｷ)

↓↓↓↓↓
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/26497f83-0804-2125-ecdc-eea09a68c366.png">
正解!!

---

### 第4問

<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/b1958c50-aa89-7653-849a-d50aeace1e1a.png">

後輩　「これは...やってないなぁ...」
　　　「消去法でいくとコッチ(RETF)かコッチ(WAIT)のどっちかなんですけどね...」
ワイ　(ﾄﾞｷﾄﾞｷ)

↓↓↓↓↓
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/d3ce4ac3-c04a-70dd-953d-9dfab40e9453.png">
おおおお、正解!!
あと1問!!

----

### 第5回

<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/861e1aa2-6b75-0757-e23c-f39995a2f007.png">

後輩　「これは消去法で♪」
ワイ　(ﾄﾞｷﾄﾞｷ)

↓↓↓↓↓
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/84c4ed8c-ab67-1126-37cc-999ac40d6285.png">
すごいミッション達成した!!

---

**いけるところまでいってみよう**

### 第6問
<img width="100" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/a3104618-eb87-c02f-13a4-0e1b3897503c.png">

### 第7問
<img width="100" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/3deffcbc-f223-2a2a-74ea-2bc4c67cb961.png">

### 第8問
<img width="100" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/3a3ae95e-0f37-69fc-c75d-b1a08a7a9ef2.png">

後輩　「いい調子ですね〜♪」
ワイ　「す、すげぇ...」

### 第9問
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/3befaaf0-0479-da01-d4d4-673ff81aef78.png">

### 第10問
<img width=150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/6a426bf6-7917-88fb-3188-fdc8f0eb0c76.png">

### 第11問
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/6a48f064-3e25-b405-5109-2d6c3e6e62c0.png">

ワイ　「ど...どこまでいくんや...」

### 第12問
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/fbb9c9ff-99de-10ce-f81c-ab3d462e3e37.png">

後輩　「え..A6...」
ワイ　(ﾄﾞｷﾄﾞｷ)

↓↓↓↓↓
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/0a711e53-f879-0650-57be-4e72fc3803b7.png">
おおおおおお!!!

---

### 第13問
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/7ab25851-0ecd-a34c-672a-991d6e09bd6e.png">
後輩　「6かEか、どっちかだ..」
ワイ　(ﾄﾞｷﾄﾞｷ)

↓↓↓↓↓
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/6abf91f3-f24a-0387-9898-3cae979e43a8.png">

後輩、ワイ　「あああああああああああああああああああああああああ!! (絶叫」

---

## 結果

見事、ミッションを期待以上の結果で応えてくれました!! :sparkles: 
後輩の努力の証拠をここに貼り、以上で記事といたします。
お読みいただきまして、ありがとうございました :bow_tone1: 

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62318/e3a4b391-8199-8ffb-cdab-9f6acb30d16b.jpeg">

---

## ソースコード

https://github.com/aucfan-yotsuya/assembler-carta-training