さて、カーネルいじりをやりだして、シェルコードを作ってみるという事までやって、いったいどこに向かっているんだという経路で進めてきて、ぼちぼち本筋だったはずのTCP/IPプログラミングに戻ろうと思ったんだが・・・
安西先生・・・!!もうちょっとだけアセンブラがしたいです・・・
と、リトルたけけんに尋ねて、・・決めました。
結局、安西先生なのかリトルたけけんのどっちが答えたのかは分からないけど、アセンブラをやる事にしました。
んで、どうせなら面白いほうがいいし、カーネルいじりもまたやりたいと思ってるから、OS自作入門を買いました。C言語とアセンブラでやってるらしいからちょうど良かったのだ。
と思ってたんだけど、実際やってみるとアセンブリはnaskという筆者オリジナルのアセンブリ言語の様子。nasmだと思ってたぜい。まあいいか。
QEMUで実行してくれるバッチファイルが付属してあるのでとても簡単に起動できる。
最初に実行するOSで表示されるメッセージもやはりいつものやつだった。ここからどんどん大きくしていくらしい。
VMwareでももちろん可能。
ただ気になるのが、書籍ではnaskとやらでソースを書いてあるのだけど、レジスタの類はなんも出てこず、dbで1バイト書き込み、RESBでバイトを空けてあるという記述だけのソースなので訳がわからん。
たけけんのブログと同じくHow Toではないので、致し方ないのだけど、わけわからんで終わるのも勿体ないので、少しだけ調べてみる。
まずは書籍のソースをLinuxでasmファイルで作成してみて、objdumpしてみたらバイナリデータから普段よく見る形式に近い形にできた。
8048060: b8 00 00 8e d0 mov $0xd08e0000,%eax 8048065: bc 00 7c 8e d8 mov $0xd88e7c00,%esp 804806a: 8e c0 mov %eax,%es 804806c: be 74 7c 8a 04 mov $0x48a7c74,%esi 8048071: 83 c6 01 add $0x1,%esi 8048074: 3c 00 cmp $0x0,%al 8048076: 74 09 je 0x8048081 8048078: b4 0e mov $0xe,%ah 804807a: bb 0f 00 cd 10 mov $0x10cd000f,%ebx 804807f: eb ee jmp 0x804806f 8048081: f4 hlt 8048082: eb fd jmp 0x8048081 8048084: 0a 0a or (%edx),%cl 8048086: 48 dec %eax 8048087: 65 gs 8048088: 6c insb (%dx),%es:(%edi) 8048089: 6c insb (%dx),%es:(%edi) 804808a: 6f outsl %ds:(%esi),(%dx) 804808b: 2c 20 sub $0x20,%al 804808d: 77 6f ja 0x80480fe 804808f: 72 6c jb 0x80480fd 8048091: 64 21 0a and %ecx,%fs:(%edx) 8048094: 0a 00 or (%eax),%al
これならまだ見れるが、よく見てみるとメッセージを表示するだけと思ってたんだけど、そうでもないらしい。
まだまだ先は長いけど、のんびり続けていこう。
OS自作入門と合わせて、気分転換のときにSed&Awkを軽く進めていこう。
参考文献
30日でできるOS自作入門 川合秀美著