2020-02-24
プログラムが思ったように動かない時、メモリ内容をチェックするのは常套手段。サーバーなどで使われるlinuxではコアダンプというのが有名です。

メモリを読むためにはどう記録されている把握していること、そのマシンのマシン語の知識が必須です。ただ、メモリがギガの単位(10億)までいってしまうと、人の目だけでチェックするのは現実的ではなくなってくるので、支援ツールを使いこなすテクニックが必要になります。

その点、メモリがキロの単位(千)のIchigoJamや、ファミコンゲームなら、自力でなんとかできますし、支援ツールを自作するのも簡単です。 本質的にやっていることは変わらないので、ホワイトハッカー入門にもぴったり!

JavaScriptで作られたファミコンのエミュレーター JSNES にメモリのリアルタイムモニター機能をつけるため、GitHubからソースをfork(自分のプロジェクトとしてコピー)しました。(src of JSNES by @taisukef on GitHub)

サンプルとして入っていた、GGJ2018で作られた「InterglacticTransmissing」を動かしている様子。 CHROMの256キャラクターx2を表示し、1024byte x 4 のVRAMも色付きで表示します。


[audio on]ボタンを押すと、サウンド出力にも対応。


[change rom]ボタンで、「Kawakudari for NES」に切り替えできます!
こちらはBGは不使用。スプライトを使っている様子が右下の囲み内で確認できます(主人公ネコは一番下、SPR63)

JSNESをforkして改良したポイントは、import/export対応。Node.jsで使われているJavaScriptのファイル単位のインポートの仕組み require を書き換えて、web上でも分かりやすくモジュールに別れたプログラムそのままで、動くようにしました。

nes-embed.js - ブラウザ組み込み用サンプル(自由に改造しよう!)
nes.js - ファミコンエミュレーター
conroller.js - コントローラー
cpu.js - MOS6502 CPU
rom.js - プログラムやキャラクターROM
mappers.js - メモリマップドI/O
ppu.js - グラフィックチップエミュレーター
tile.js - BG
papu.js - サウンドチップエミュレーター
utils.js - 便利メソッド集

どれもシンプルでキレイな実装です!
ハードウェアとソフトウェアをつなぐ鍵、マシン語。楽しく遊びながら学びましょう!

ボストンクラブのメガネ「JAPONISM JN-590 COL.01」、neoplug+ウェアラブル、主人公を助けるスゴイ電脳メガネが登場した、映画「AI崩壊」。 主人公が扱うプログラミング言語は Intel x86マシン語 でした!(他にもPythonや、PythonとC言語が混ざった感じの謎のプログラミング言語が登場)
31byteのマシン語で詠む和歌!? アセンブラ短歌 WakaAssembly for macOS 32bit編

映画を見て、情報セキュリティに関して興味が出てきた方にオススメしたいイベント
サイバーセキュリティフォーラム&ミートアップin 福井」(2020.3.2)
知識を日々アップデート!

links
- かわくだりゲーム for NES、はじめてのファミコンゲームづくり
- はじめてのマシン語 - IchigoJamではじめるArmマシン語その1

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS