OS作成その1 HelloWorld

さて、カーネルいじりをやりだして、シェルコードを作ってみるという事までやって、いったいどこに向かっているんだという経路で進めてきて、ぼちぼち本筋だったはずのTCP/IPプログラミングに戻ろうと思ったんだが・・・

安西先生・・・!!もうちょっとだけアセンブラがしたいです・・・

と、リトルたけけんに尋ねて、・・決めました。

 

結局、安西先生なのかリトルたけけんのどっちが答えたのかは分からないけど、アセンブラをやる事にしました。
んで、どうせなら面白いほうがいいし、カーネルいじりもまたやりたいと思ってるから、OS自作入門を買いました。C言語とアセンブラでやってるらしいからちょうど良かったのだ。

と思ってたんだけど、実際やってみるとアセンブリはnaskという筆者オリジナルのアセンブリ言語の様子。nasmだと思ってたぜい。まあいいか。

QEMUで実行してくれるバッチファイルが付属してあるのでとても簡単に起動できる。
最初に実行するOSで表示されるメッセージもやはりいつものやつだった。ここからどんどん大きくしていくらしい。

MyOS_02

VMwareでももちろん可能。

MyOS_01

ただ気になるのが、書籍では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自作入門  川合秀美著

 

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *