もう二度と見たくない恐怖のマシン語ダンプリスト
納涼!ほんとにあった怖いコード(by CodeIQ×はてな)
CodeIQ x はてな エンジニア夏祭り2013 第2夜ということで応募します。
その前に、まず自分の近況報告から。審査員の方はここはスルーでお願いします。
8/7(水)入院7日目終了:今日やっと絆創膏が全部とれた。念願の抜糸も半分だけ終わった。
前歯を全損する大怪我から、今日でちょうど1週間が経った。
今でこそ普通に喋られる(注:「シ」と「チ」は除く)ほどまで回復したが、先週の今頃は怪我で大変な思いをしていたわけで、この1週間はほんとめまぐるしく状況が変わっていったなぁ、としみじみ思ってしまった。
今日の午前の診察で、怪我当日からずっと絆創膏を貼っていた部分(右手、右肩、上唇、眉間)も剥がせて、これで体中から絆創膏が全部なくなった。
これで絆創膏を気にすることなく、思う存分風呂に入ることが出来る。
それと今日は念願の、口の中を縫ったところの抜糸をやってもらえた。
ただし4カ所のうち2カ所だけ。
残りは様子を見て明日、ということになった。
今日時点では、退院の日程について主治医の先生から何も言われていないが、次回の診察時には何かしら話があるのではないか?と思っている。
あと、今日は七夕の日。
病院の夕食に短冊が配られたので、今の願いを書いてみた。
さて、ここからが本題。
今でも思い出すのも嫌なトラウマのことを書きたいと思う。
その話は今から約30年前、月刊マイコンという雑誌がまだ発行されていた時期に遡る。
当時、ナショナルが発売していたJR-200というパソコンを持っていたのだが、この時代のメジャー機種であったPC-6001やPC-8001などに比べると、マイナー機種故の悲しさから市販されているソフトなどほとんどなく、ゲームは専ら、雑誌に掲載されていたBASICのソースコードを手打ちでパソコンに打ち込んで、やっと遊べるような状況だった。
そんな折、月刊マイコンにJR-200用に市販されていたシューティングゲーム(だったと思う)のソースコードが掲載*1されたことがあった。
ただでさえ少ない市販ゲームで、そのソースコードが載っているということで、喜び勇んで月刊マイコンを買ってきた。
ただし、こういったゲーム関係は処理スピードを重視するため、BASICではなく全てマシン語で書かれており、当然ソースコードも16進数のダンプリスト。
しかも、それがなんと60ページもあった。
自分はそれまでBASICでプログラムを入力したことはあったが、バイナリエディタを使ってマシン語を入力したことはない。
でも、自分には市販ゲームを遊ぶことができるという嬉しさから、そんなことはさして気にせず入力し始めた。
めくれど、めくれど、ダンプリストは続き、ぱっと見、同じようなページが何ページも続くが、とにかくひたすら16進数を入力していった。
それでやっと打ち込み終えることが出来たのだが、起動してみると動かない。
なんでだろう?と思って最初のページから打ち込んだソースと比較していくと、
なんと10ページほど進んだところで、丸々2ページとばして、最後まで入力していたことに気づいた。
ページをめくる際に2枚一緒にめくってしまったことに気づかなかったようだ。
これが上級言語なら、文脈の流れで飛ばしたことに気づいただろうが、相手は16進数ダンプリスト。
ぱっと見、単なる16進数の羅列のため、違いなんてわからない。
「唯一、違うといったら・・・」と思った時点で気がついた。
「あーっ! だから一番左側の数値(入力アドレス値)が違っていたのか!」
つまり、誤ってページを飛ばしてしまって以降、入力アドレス値が、画面に表示されているものと、見ているページとで違っていることには気づいていたのだが、そこは編集出来なかったため「そういうものなのだろう」と思ってスルーしてた。
#こんな一番肝心なところをスルーするところは、さすがマシン語入力初心者。
#慣れている人からするとあり得ないミスをする。
#でも、こうやって痛い思いしながら、なんでも覚えていくもんなんだよね。
#以上、現在の自分からのコメント
どうしたものかと考えたが、当時のバイナリエディタは、コピペなんて好都合な機能は持っていなかったため、
結局は
抜けたページを含めて、残りの50ページをまた入力し直し
するしかなかった。
マ、マジですか・・・orz
さすがに同じ労力をする根気はなく、諦めざるを得なかった。
えぇ、さすがにブチギレましたよ。
でも、原因は自分のため怒りをぶつける相手がいなく、哀れ月刊マイコンがそのとばっちりをくらって、即ゴミ箱行きになったとさ。
それ以来、マシン語のダンプリストは、二度と見たくなくなったことは言うまでもない。