30日OS自作入門27日目(Win10)

はじめに

LDTとライブラリをやるようです。

目次

LDTとライブラリ

まずはバグを直そう(harib24a)

×ボタンが動かなかった理由は、コンソールのタスクをスリープになっていたのに、終了処理等がコンソールタスクに依存していたのが原因のようです。

実行すると

アプリ実行中でもコンソールを閉じたい(harib24b)

修正箇所が多かったので、見返しやすいように箇条書き

・コンソールの×ボタンが押されたら、とりあえず非表示

・2024~2279割り当てを、コンソールのみ閉じるに割り当て

・カーソル関連をcons.shtの管理に変更

・hrb_apiFIFOバッファを受け付けるようにして、4が来たら終了処理を行わせる

実行すると

アプリケーションを守ろう(1)(harib24c)

これはアプリケーションと判定したら、そのアプリケーションのデータセグメントを攻撃しているようです。自分は調べるまでデータセグメントということに気付かなかったのですが、以下の方のブログがわかりやすかったです。

yuyubu.hatenablog.com

実行してみると

アプリケーションを守ろう(2)(harib24d)

アプリケーションから、他のセグメントへアクセスできてしまうことが問題なため、そこをできないようにするようです。そのために使用するのがLDTで、GDTとの違いは以下のようになっています。

名前 違い
GDT すべてのタスクからアクセス可能なセグメント
LDT 一部のタスクからのみアクセス可能なセグメント

実行すると

アプリケーションのサイズ改善(harib24e)

api関連のファイルを細かく分けて、必要なAPIだけ連結させるように修正したようです。

ここはVScodeの一括置換を使えば楽にできます。

実行すると
f:id:No000:20200219224536p:plain おぉ…!小さくなった

ライブラリ(harib24f)

・ライブラリという者は前節で上げたような、objファイルを繋げたものになる

・ライブラリアンという、ライブラリを管理するツールが必要

・sprintfとrandはztool/hariboteにあるらしい

実行すると
f:id:No000:20200220014740p:plain

make環境の整理(harib24g)

・APP関連のディレクトリのMakefileはアプリケーションをビルドするのに使用する

・中間生成物を消す場合は、clean_fulか各ディレクトリのMakeでcleanする

haribote.rulは著者のhari24gじゃないとエラーが出ていた(自分の入力ミスの可能性もあるので、後日確認)

hrb.osask.jp

これに書いてありました…
Makefileと同様に、ディレクトリの指定等をするファイルなので、ディレクトリ指定が間違えていたようです。

整理し終わると
f:id:No000:20200220171719p:plain

メモ

・リンカはくっつけるかくっつけないかしかできない

・最初は、大きなプログラムを作るだけの手法だった。その後、コードという部品を使いまわすべく構造化プログラングという手法が登場して、ライブラリが生まれた。そして現在の、管理できないほど多くなった関数を管理するためにオブジェクト指向が生まれた。

最後に

Makefileの修正にてこずったり、キーパッドが壊れたりと時間がかかりましたが終わったので、結果オーライ!