2014年4月12日土曜日

久しぶりに逆アセンブラでbug発見

以前いじっていたラインアセンブラ&逆アセンブラのコードを何気なく見ていたら、Bugを発見した。
最初、おかしいなと感じるけど、しばらくいじってなかったので、判断できない。
MSP430は、アセンブリ言語とマシン語が一対一ではないので、バイナリが一致していなくても、同じニーモニックになる事がある。
それと区別するのがやや手間である。

SVNのメッセージやログ、テストコード、ソースコード内のコメント、そしてこのブログの記事を読んで、その当時のことをだんだん思い出してきた。
テストコードがERRORと判断したものは、14個ある。
それらすべては、逆アセンブルして、アセンブルしなおした内容が、元のマシン語に一致しないというものだ。
同じ異常が複数回報告されているので、種類数でいうと4種類になる。
そのうち、3つは表現が違うだけで、問題はないことがわかった。
残りの1つは、やはりBugだった。

ブログの記事を見直すと、正常系しかテストできてないみたいなことが書いてある。
このBugは、異常系のコードを扱う時の問題だ。異常系の処理も最初から実装しているものの、とりあえずテスト内容からは除外していた。しらみつぶしテストを作るときに、それらのテストも行う用意を始めたのだが、何らかの事情で、途中で投げていたようだ。

Bugを修正した後、残りの3つについても、どうするか検討した。
表現が違うのは、元のマシン語が特殊すぎるものだからだ。
これらは、無駄に長いワードで表現された命令や、アドレス範囲が狭いものなど、通常使われないマシン語だ。
これを逆アセンブルして、アセンブルしなおした時、アセンブラが適切なマシン語にしてしまうため、元のバイナリとは違ってくる。

色々考えたのだが、逆アセンブラがこのような通常使わない命令に遭遇するのは、コード領域以外の部分を逆アセンブルしてしまった時が多いだろう。
本来、これらの領域を逆アセンブルする必要はない。しかし、どういう命令なの解かっているのに示さないというのも、逆アセンブラとしては片手落ちだ。そのため、逆アセンブラとしては、アセンブリ言語で表示すべきだ。しかし、アセンブリ言語になってしまうと、普通の命令と区別がつかなくなる。
元のバイナリが普通ではないという事が区別できるようにしておきたい。そうすることで「ここはコード領域ではない可能性が高い」というのがわかりやすくもなる。
区別のため、そのような命令の後ろに、コメント文で"WARNING: Inefficient instruction."とか、"WARNING: Restricted DST ADDR."とかをつけるようにした。
とりあえず、実装してみたが、Warningと言いたくなるような命令は他にもたくさんある。
今回は、問題を検出したその場所で表示するようにしたが、もっと統一的な手段で実装したほうがいいかもしれない。

その修正をするのはいつになるだろう。また来年かな。
納期があるわけではない。のんびりやろう。

関連する過去の記事:
ラインアセンブラ
ラインアセンブラ2
ラインアセンブラ3
ラインアセンブラ4

2014年4月6日日曜日

井田へ行ってきた

先週の日曜も井田に行っていたのだが、1本しか潜らなかった。
その日は、すごい低気圧で海は荒れていた。

特に2本目は、うねりも入り、危険な雰囲気だった。
それでも海に入り、ある程度沖まで出て、これからエントリーというところで、田中さんが「何か嫌な気がする。」と言い出した。
ポジティブシンキング&サービス精神旺盛な田中さんが、そんな事を言うのは珍しい。
遠回りに、すれすれの言葉で危機的状況に対する警告を発しているかもしれないと感じ、「上がりますか?」と聞いたら、田中さんは「うん。上がろう。」と答えた。
3月頭にも、井田に行っていたのだが寒すぎて1本しか潜っていなかったので、潜りたかったのだが、田中さんがそういうのだから、諦めるしか無い。

帰り支度をして、海を後にするときにもう一度見ると、危険なほど荒れていた。潜っていたら、ちょうど上がる時間だ。田中さんはこれが解っていたのかと思うと、あらためて尊敬した。本当にすごい人だ。

そして今日、先週のリベンジという事で、また行ってきたのだった。
自分にしてみれば、2度の連敗に対するリベンジ。
「今度こそは!」という強い思いで臨んだ。そのせいか、極めて不安定な大気状態で、暴風・雷雨、さらに季節外れの雪と言われていたにも関わらず、井田に到着した時点で、ピーかんの晴天。
気温はやや低いものの、抜けるような青い空の眩しい太陽が暖かい。

大粒のゴミは目立つが、透明度も水温も高め。黒潮は離れてるのに、なんだろう?
井田といえば、群れ。
イシモチ、キンギョハナダイ、スズメダイの群れ、群れ、群れ。


ソフトコーラルに、スズメダイが隠れていた。
なんか、面白かったので撮影した。


大きなウミウシがいた。


見慣れないのがいたので、撮影したが、手ブレがひどい。
やはり、いつもとは違う潮が流れてきてるのだろう。

この魚なんだろう。ハゼ?トラギス?ギンポ?ホウボウ?

コウイカの子供もいた。




オルトマンワラエビ。


シマウミスズメも狙ったんだけど、撮影失敗。

さかなくんが帽子にするほど、ハコフグは可愛らしい。
見つけるととりあえず撮影する。

海から上がっても、強い日差しで温かい。
天野荘の前で売られているネーブルを買ったら、おばちゃんが「これも持ってって」と、さらにネープルをくれた。

(帰宅後に撮影)


帰りは、沼津漁港の丸天で「生しらすぶっかけ丼」を食べた。
生しらすは傷みやすいので、海でしか食べられない。

醤油をさっとかけて食べると、素朴な美味さが楽しめる。

食事後に移動し始めると、強い雨が降ってきた。稲妻が光り、雷鳴が轟く。
海にいる時のあの穏やかな晴天はどこへ行ったのかという感じだ。
箱根を超えて帰ってきたが、途中雪が降っていた。

今日は、一日で、春夏秋冬を味わったような感じだった。
それもまた、いとおかし。