はじめに
弊社ではデータの検索サービスを提供しており、今もレガシーなデータベースシステムを保有しております。
中でも独特なのは、いわゆるCの mmap()
システムコールにより生成された巨大なバイナリファイルによる検索データベースです。
中身は固定長の値を持つ構造体によるバイナリデータです。中堅エンジニアの方であれば固定長と聞くとピンとくるかもしれません。COBOLを彷彿とさせますね。(昭和)
そう、ダンプやデバッグは常であります。
ある日のこと
ワイ 「これがHEXダンプや。わかるか?」
後輩 「わかりません」
ワイ 「なんやて!?」
(アカン... これは教育せなアカンやつや)
ワイ 「あとで 特別ミッション 渡すでー」
後輩 「特別ミッション(((( ;゚Д゚)))」
ワイ 「EC2インスタンス建ててー」
「コードカキカキ...」
(数時間後)
ワイ 「おっしゃできた!」
特別ミッションをあたえる
ワイ 「ちょっとzoomええか?」
後輩 「部屋立てますね」
ワイ 「今から自分、バイナリアンになってもらうで。こんなん作ったから、覚えるやで」
後輩 「ゴクリ...」
↓↓↓↓↓
【レギュレーション】
- x86の1バイト命令に対する正しいHEX値(またはその逆)を答える。
- 出題された「命令」または「HEX値」に対する、正しいリンクclickして回答。
- 出題はランダム。
アセンブラかるたとは、SECCONなどのセキュリティ系イベントで開催された競技です。
ヒント
- 縦がHEXの上位桁、横が下位桁。
- たとえば、0x
06
→PUSH ES
という命令。 -
POP ECX
→ 0x58
というHEX値になります。
とりあえず、抜き打ちでやらせてみる
第1問
- 0x53 に対する「命令」を選ぶ
第2問
- INC ECXに対する「HEX値」を選ぶ。
ワイ 「よっしゃ最初はそんなもんや」
「今から2時間後にテストするから覚えるやで」
「5問連続で正解したら合格や」
後輩 「わかりました!」
ワイ 「ほな!」
(2時間経過)
テスト開始
ワイ 「時間やで」
後輩 「さ...30秒だけ復習させてください!!」
ワイ 「なんやて!?」
(30秒経過)
後輩 「準備できました!」
ワイ 「ほないってみよか!」
※ぜひみなさんもご一緒に!!
第1問
後輩 「さ..早速、覚えてないところが...(汗」
ワイ (ドキドキ)
後輩 「消去法で...どっちかですね」
第2問
後輩 「また、運悪く覚えてないやつが...(汗」
ワイ (ドキドキ)
第3問
後輩 「あ、これは覚えました♪」
ワイ (ドキドキ)
第4問
後輩 「これは...やってないなぁ...」
「消去法でいくとコッチ(RETF)かコッチ(WAIT)のどっちかなんですけどね...」
ワイ (ドキドキ)
第5回
後輩 「これは消去法で♪」
ワイ (ドキドキ)
いけるところまでいってみよう
第6問
第7問
第8問
後輩 「いい調子ですね〜♪」
ワイ 「す、すげぇ...」
第9問
第10問
第11問
ワイ 「ど...どこまでいくんや...」
第12問
後輩 「え..A6...」
ワイ (ドキドキ)
第13問
後輩 「6かEか、どっちかだ..」 ワイ (ドキドキ)後輩、ワイ 「あああああああああああああああああああああああああ!! (絶叫」
結果
見事、ミッションを期待以上の結果で応えてくれました!!
後輩の努力の証拠をここに貼り、以上で記事といたします。
お読みいただきまして、ありがとうございました
ソースコード