2004-10-17 (日)
*MIPS
まだ身体の調子が悪い.
CRCっぽいデータが付いていると書いたけど,普通にCRC32っぽいです.一度計算したときは,違う値になって何か細工がしてあると思ったのですが,さっきやったら同じでした.何を間違ったのかな.とりあえず,ZIPファイルから自動でファームウェアを作るプログラムも大丈夫そうです.CRCは無視しても動くみたいですが….
次の攻略対象はSOHO.BIN.バイナリエディタで眺めただけでは,どうやら何かのプログラムらしいこと,もともとはC言語で書かれていることくらいしか分かりません.CPUのメーカのサイトを見ると,どうやらMIPS系であるということが分かります.でも,MIPSのコードなんてまったく分からないので,手が出ません.しかも,ビッグエンディアンとリトルエンディアン両方があるようです.0x0007a120なんていう人間が決めたとしか考えられない数値が出てくるのでリトルエンディアンなのは間違いないと思いますが.バイナリエディタで眺めていても,これ以上先に進めないので,とりあえず,MIPSについて調べる.真面目にCPUのアーキテクチャから勉強する気はないので,とりあえず,どんなプログラムでも使っているはずのシステムコールとジャンプから.バイナリを見てるだけでも,ちょっとだけ分かってきました.というか,もともとヘッダなんて無いんですね.先頭からいきなりプログラム本体です.なんとなく全体を見回して,あとは逆アセンブルすることにする.MIPSの逆アセンブラは色々見つかったので,いくつか試す.オペランドが3つあるんですね.なんか,ポケステをいじってたころが懐かしくなります.読み始めていきなり,空のループを回してます.デバイスの初期化を待ってるんでしょうか…?ループの直後はnopを置いてある.これは遅延分岐対策でしょうか.だんだん勘が働いてきました.0x80001000から始まってると考えれば,コンソールに表示されるアドレスとぴったり合致します.無意味に同じアドレスに何度もデータを書いてるけど,I/Oはメモリにマップされてるということらしい.しかも,b2600000hに書き込むデータとシリアルポートに出力されるデータがそっくり.試しにHello world!を表示するプログラムを作って書き込んでみる(もちろん,ルータとしては働かないけど(笑)).普通にいけました.ただ,メインの関数が呼ばれた後は,違う方法で送ってるようです.まぁ,I/Oに直接出力するときは,シリアルポートの速度に合わせてウエイトを入れないと駄目みたいなので本来の方法じゃないのは分かります.ファームウェア起動後は何もしないと,ハブとしても動かないんですね.PCがネットワークケーブルが接続されてないと怒ってました.
にしても,これだけのものが量販店で数千円で買えるとなると,秋月とかで,マイコンボードのキットを買うのがバカらしくなってしまいそうですね.といいながら,私はワンチップマイコンはちゃんと触ったこと無いのですが.今なら3000円くらいで売ってるので,もう一つくらい欲しいかも.
BBR-4MGの情報探してたら,すでに私が書いた文章が貼られているのを見つけてしまった.勝手に転載するのは全然Okですが.
ファームウェアを見てるとPOP3サーバもどきが実装されている気がする.どうやって動かすのか分からないですが.あと,何かのIDとパスワードがハードコーディングされているのだけど,何に使うのかな.コンシューマ向けの格安ルータもかなり奥が深い.