2: 2008-12-23 (火) 15:30:18 |
3: 2008-12-23 (火) 15:30:18 |
| -メモのうち重要な部分をそのうちまとめてまともなページを作る | | -メモのうち重要な部分をそのうちまとめてまともなページを作る |
| *** (30) helloの改良の歴史 (118→18) | | *** (30) helloの改良の歴史 (118→18) |
- | -(参考として)''DOS'' | + | -(参考として)''DOS''の.COM形式: |
| --22バイトが限界 | | --22バイトが限界 |
| --ヘッダとかはない。AHとDXに代入してINT21H。終了はRETでいい。 | | --ヘッダとかはない。AHとDXに代入してINT21H。終了はRETでいい。 |
| -''27バイトのhello'': | | -''27バイトのhello'': |
| --DOS版が22バイトなのは16bitだからしょうがないと思えたが、「はりぼてOS」に負けたのは屈辱的だった。そこで設計をやり直す。 | | --DOS版が22バイトなのは16bitだからしょうがないと思えたが、「はりぼてOS」に負けたのは屈辱的だった。そこで設計をやり直す。 |
- | --適当な標準値を設けてそれを変更する方式で、スタックサイズなどを記述させることに。標準値は小規模プログラムには十分な値なので、helloでは変更の必要が全くない。 | + | --適当な標準値を設けてそれを必要に応じて変更する方式で、スタックサイズなどを記述させることに。標準値は小規模プログラムには十分な値なので、helloでは変更の必要が全くない。 |
- | --またパケット要素を32bit固定長からeh4という4bit単位可変長エンコードに変更(のちにgh4にアップグレードするがhelloは影響なし)。小さい数値なら4bitで収まるので、パケット効率8倍に! | + | --またパケット要素を32bit固定長から、eh4という4bit単位可変長エンコードに変更(のちにgh4にアップグレードするがhelloは影響なし)。小さい数値なら4bitで収まるので、パケット効率8倍に! |
| --またレジスタ初期値を工夫したので、EBPの値を破壊しない限り、CALL(EBP)の2バイトでAPI-callができるようになった(EBXを変更しなければEIPからパケットが始まると見なされる)。終了もDOSと同じくRETだけでもOKに。初期化funcはシステムが事前に適当にやってくれるので、それを変更したいとき以外は省略可能。 | | --またレジスタ初期値を工夫したので、EBPの値を破壊しない限り、CALL(EBP)の2バイトでAPI-callができるようになった(EBXを変更しなければEIPからパケットが始まると見なされる)。終了もDOSと同じくRETだけでもOKに。初期化funcはシステムが事前に適当にやってくれるので、それを変更したいとき以外は省略可能。 |
| --旧OSASKでは8バイトもあったシグネチャを2バイトに。 | | --旧OSASKでは8バイトもあったシグネチャを2バイトに。 |