uxf_01
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* Universal eXecutable Format - 01
-(by [[K]], 2016.09.27)
** COFFとの比較
-まず、ベースとなるソースプログラムを提示します。
int uxfdl_printf(const char *fmt, ...);
int entry(int argc, const char **argv)
{
uxfdl_printf("hello\n");
return 0;
}
-たったこれだけの128バイトのプログラムです。
-これをgcc 3.4.5で普通にコンパイルすると(=リンクはしな...
offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +...
--------------------------------------------------------...
00000000 4C 01 04 00 00 00 00 00 F8 00 00 00 0D 00 00 0...
00000010 00 00 04 01 2E 74 65 78 74 00 00 00 00 00 00 0...
00000020 00 00 00 00 20 00 00 00 B4 00 00 00 E4 00 00 0...
00000030 00 00 00 00 02 00 00 00 20 00 00 60 2E 64 61 7...
00000040 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000060 40 00 00 C0 2E 62 73 73 00 00 00 00 00 00 00 0...
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000080 00 00 00 00 00 00 00 00 80 00 00 C0 2E 72 64 6...
00000090 74 61 00 00 00 00 00 00 00 00 00 00 10 00 00 0...
000000A0 D4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
000000B0 40 00 00 40 55 89 E5 68 00 00 00 00 E8 00 00 0...
000000C0 00 C9 31 C0 C3 90 90 90 90 90 90 90 90 90 90 9...
000000D0 90 90 90 90 68 65 6C 6C 6F 0A 00 00 00 00 00 0...
000000E0 00 00 00 00 04 00 00 00 0A 00 00 00 06 00 09 0...
000000F0 00 00 0C 00 00 00 14 00 2E 66 69 6C 65 00 00 0...
00000100 00 00 00 00 FE FF 00 00 67 01 68 65 6C 6C 6F 2...
00000110 63 00 00 00 00 00 00 00 00 00 00 00 5F 65 6E 7...
00000120 72 79 00 00 00 00 00 00 01 00 20 00 02 01 00 0...
00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000140 2E 74 65 78 74 00 00 00 00 00 00 00 01 00 00 0...
00000150 03 01 11 00 00 00 02 00 00 00 00 00 00 00 00 0...
00000160 00 00 00 00 2E 64 61 74 61 00 00 00 00 00 00 0...
00000170 02 00 00 00 03 01 00 00 00 00 00 00 00 00 00 0...
00000180 00 00 00 00 00 00 00 00 2E 62 73 73 00 00 00 0...
00000190 00 00 00 00 03 00 00 00 03 01 00 00 00 00 00 0...
000001A0 00 00 00 00 00 00 00 00 00 00 00 00 2E 72 64 6...
000001B0 74 61 00 00 00 00 00 00 04 00 00 00 03 01 07 0...
000001C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
000001D0 00 00 00 00 04 00 00 00 00 00 00 00 00 00 20 0...
000001E0 02 00 12 00 00 00 5F 75 78 66 64 6C 5F 70 72 6...
000001F0 6E 74 66 00 ...
-128バイトから500バイトになるなんて!
-中身は見ての通りゼロばかりでスカスカです。
-この中には32バイトの.textセクションと、0バイトの.dataセ...
-128バイトのソースから作るからスカスカなんだという反論は...
--手元にあるobj2uxf.cのコンパイルで実験したところ、15.9KB...
-こうなった原因の一つに、asがあまり優秀ではないということ...
-というこで、gccにアセンブラソースを出力させて、gas2nask...
offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +...
--------------------------------------------------------...
00000000 4C 01 03 00 00 00 00 00 B8 00 00 00 0A 00 00 0...
00000010 00 00 00 00 2E 74 65 78 74 00 00 00 00 00 00 0...
00000020 00 00 00 00 11 00 00 00 93 00 00 00 A4 00 00 0...
00000030 00 00 00 00 02 00 00 00 20 00 10 60 2E 64 61 7...
00000040 61 00 00 00 00 00 00 00 00 00 00 00 07 00 00 0...
00000050 8C 00 00 00 A4 00 00 00 00 00 00 00 00 00 00 0...
00000060 40 00 30 C0 2E 62 73 73 00 00 00 00 00 00 00 0...
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000080 00 00 00 00 00 00 00 00 80 00 10 C0 68 65 6C 6...
00000090 6F 0A 00 55 89 E5 68 00 00 00 00 E8 00 00 00 0...
000000A0 C9 31 C0 C3 04 00 00 00 04 00 00 00 06 00 09 0...
000000B0 00 00 08 00 00 00 14 00 2E 66 69 6C 65 00 00 0...
000000C0 00 00 00 00 FE FF 00 00 67 01 68 65 6C 6C 6F 2...
000000D0 63 00 00 00 00 00 00 00 00 00 00 00 2E 74 65 7...
000000E0 74 00 00 00 00 00 00 00 01 00 00 00 03 01 11 0...
000000F0 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000100 2E 64 61 74 61 00 00 00 00 00 00 00 02 00 00 0...
00000110 03 01 07 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000120 00 00 00 00 2E 62 73 73 00 00 00 00 00 00 00 0...
00000130 03 00 00 00 03 01 00 00 00 00 00 00 00 00 00 0...
00000140 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 0...
00000150 00 00 00 00 00 00 00 00 02 00 5F 65 6E 74 72 7...
00000160 00 00 00 00 00 00 01 00 00 00 02 00 12 00 00 0...
00000170 5F 75 78 66 64 6C 5F 70 72 69 6E 74 66 00 ...
-128バイトが382バイトになりました。でもまあスカスカ感はあ...
-.textセクションが17バイトに、.dataセクションが7バイトに...
-これをuxfに変換するとこうなります。
offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +...
--------------------------------------------------------...
00000000 01 00 11 07 00 55 89 E5 68 00 00 00 00 E8 00 0...
00000010 00 00 C9 31 C0 C3 02 01 11 07 19 70 72 69 6E 7...
00000020 66 68 65 6C 6C 6F 0A 00 00 ...
-超スッキリです!41バイトです。しかも最初の11,07,00で、.t...
-uxfでは_uxfdl_で始まるラベルについては、_uxfdl_が省略さ...
--uxfdlというのはuxfのダイナミックリンクという意味です。
** efg01(第二世代OSASK)との比較
-efg01では"hello, world\n"を表示するのに必要なバイト数は1...
-でもこのサイズのhelloを作るのは結構大変で、C言語でちょろ...
-efg01でも普通のC言語ソースでhelloを書いたらどうなるかの...
-efg01は、APIも独自の仕様を選び、また内部のエンコードもgh...
-今回はC言語で書ける範囲でしか頑張らないようにしています...
-uxfは「簡単な割には結構いけている」を目指しています。x86...
-それに今や究極の小ささに関してはOSECPU-VMがあるので、efg...
** なぜuxfdlを付ける仕様を選んだのか?
-gccでprintfを普通に使うと、putsやputcharに置き換えるとい...
-また単にprintfを書けばいいということにすると、uxf生成プ...
-さらにC言語でprintfと書くと、COFF内のシンボル名では頭に...
** なぜ4バイトを書かずにsh8でエンコードしているのか?
-「シンプルを目指すのならsh8とかにしないで32ビットをその...
-そう考えて、だから可変長にすることこそ本質だとして、じゃ...
** uxfでCOFFの代用はできるか?
-今のuxfでは.rdataは記述できません。またデバッグ情報とか...
-まあちょっと仕様変更すれば.rdataやデバッグ情報を積める余...
* こめんと欄
#comment
終了行:
* Universal eXecutable Format - 01
-(by [[K]], 2016.09.27)
** COFFとの比較
-まず、ベースとなるソースプログラムを提示します。
int uxfdl_printf(const char *fmt, ...);
int entry(int argc, const char **argv)
{
uxfdl_printf("hello\n");
return 0;
}
-たったこれだけの128バイトのプログラムです。
-これをgcc 3.4.5で普通にコンパイルすると(=リンクはしな...
offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +...
--------------------------------------------------------...
00000000 4C 01 04 00 00 00 00 00 F8 00 00 00 0D 00 00 0...
00000010 00 00 04 01 2E 74 65 78 74 00 00 00 00 00 00 0...
00000020 00 00 00 00 20 00 00 00 B4 00 00 00 E4 00 00 0...
00000030 00 00 00 00 02 00 00 00 20 00 00 60 2E 64 61 7...
00000040 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000060 40 00 00 C0 2E 62 73 73 00 00 00 00 00 00 00 0...
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000080 00 00 00 00 00 00 00 00 80 00 00 C0 2E 72 64 6...
00000090 74 61 00 00 00 00 00 00 00 00 00 00 10 00 00 0...
000000A0 D4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
000000B0 40 00 00 40 55 89 E5 68 00 00 00 00 E8 00 00 0...
000000C0 00 C9 31 C0 C3 90 90 90 90 90 90 90 90 90 90 9...
000000D0 90 90 90 90 68 65 6C 6C 6F 0A 00 00 00 00 00 0...
000000E0 00 00 00 00 04 00 00 00 0A 00 00 00 06 00 09 0...
000000F0 00 00 0C 00 00 00 14 00 2E 66 69 6C 65 00 00 0...
00000100 00 00 00 00 FE FF 00 00 67 01 68 65 6C 6C 6F 2...
00000110 63 00 00 00 00 00 00 00 00 00 00 00 5F 65 6E 7...
00000120 72 79 00 00 00 00 00 00 01 00 20 00 02 01 00 0...
00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000140 2E 74 65 78 74 00 00 00 00 00 00 00 01 00 00 0...
00000150 03 01 11 00 00 00 02 00 00 00 00 00 00 00 00 0...
00000160 00 00 00 00 2E 64 61 74 61 00 00 00 00 00 00 0...
00000170 02 00 00 00 03 01 00 00 00 00 00 00 00 00 00 0...
00000180 00 00 00 00 00 00 00 00 2E 62 73 73 00 00 00 0...
00000190 00 00 00 00 03 00 00 00 03 01 00 00 00 00 00 0...
000001A0 00 00 00 00 00 00 00 00 00 00 00 00 2E 72 64 6...
000001B0 74 61 00 00 00 00 00 00 04 00 00 00 03 01 07 0...
000001C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
000001D0 00 00 00 00 04 00 00 00 00 00 00 00 00 00 20 0...
000001E0 02 00 12 00 00 00 5F 75 78 66 64 6C 5F 70 72 6...
000001F0 6E 74 66 00 ...
-128バイトから500バイトになるなんて!
-中身は見ての通りゼロばかりでスカスカです。
-この中には32バイトの.textセクションと、0バイトの.dataセ...
-128バイトのソースから作るからスカスカなんだという反論は...
--手元にあるobj2uxf.cのコンパイルで実験したところ、15.9KB...
-こうなった原因の一つに、asがあまり優秀ではないということ...
-というこで、gccにアセンブラソースを出力させて、gas2nask...
offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +...
--------------------------------------------------------...
00000000 4C 01 03 00 00 00 00 00 B8 00 00 00 0A 00 00 0...
00000010 00 00 00 00 2E 74 65 78 74 00 00 00 00 00 00 0...
00000020 00 00 00 00 11 00 00 00 93 00 00 00 A4 00 00 0...
00000030 00 00 00 00 02 00 00 00 20 00 10 60 2E 64 61 7...
00000040 61 00 00 00 00 00 00 00 00 00 00 00 07 00 00 0...
00000050 8C 00 00 00 A4 00 00 00 00 00 00 00 00 00 00 0...
00000060 40 00 30 C0 2E 62 73 73 00 00 00 00 00 00 00 0...
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000080 00 00 00 00 00 00 00 00 80 00 10 C0 68 65 6C 6...
00000090 6F 0A 00 55 89 E5 68 00 00 00 00 E8 00 00 00 0...
000000A0 C9 31 C0 C3 04 00 00 00 04 00 00 00 06 00 09 0...
000000B0 00 00 08 00 00 00 14 00 2E 66 69 6C 65 00 00 0...
000000C0 00 00 00 00 FE FF 00 00 67 01 68 65 6C 6C 6F 2...
000000D0 63 00 00 00 00 00 00 00 00 00 00 00 2E 74 65 7...
000000E0 74 00 00 00 00 00 00 00 01 00 00 00 03 01 11 0...
000000F0 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000100 2E 64 61 74 61 00 00 00 00 00 00 00 02 00 00 0...
00000110 03 01 07 00 00 00 00 00 00 00 00 00 00 00 00 0...
00000120 00 00 00 00 2E 62 73 73 00 00 00 00 00 00 00 0...
00000130 03 00 00 00 03 01 00 00 00 00 00 00 00 00 00 0...
00000140 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 0...
00000150 00 00 00 00 00 00 00 00 02 00 5F 65 6E 74 72 7...
00000160 00 00 00 00 00 00 01 00 00 00 02 00 12 00 00 0...
00000170 5F 75 78 66 64 6C 5F 70 72 69 6E 74 66 00 ...
-128バイトが382バイトになりました。でもまあスカスカ感はあ...
-.textセクションが17バイトに、.dataセクションが7バイトに...
-これをuxfに変換するとこうなります。
offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +...
--------------------------------------------------------...
00000000 01 00 11 07 00 55 89 E5 68 00 00 00 00 E8 00 0...
00000010 00 00 C9 31 C0 C3 02 01 11 07 19 70 72 69 6E 7...
00000020 66 68 65 6C 6C 6F 0A 00 00 ...
-超スッキリです!41バイトです。しかも最初の11,07,00で、.t...
-uxfでは_uxfdl_で始まるラベルについては、_uxfdl_が省略さ...
--uxfdlというのはuxfのダイナミックリンクという意味です。
** efg01(第二世代OSASK)との比較
-efg01では"hello, world\n"を表示するのに必要なバイト数は1...
-でもこのサイズのhelloを作るのは結構大変で、C言語でちょろ...
-efg01でも普通のC言語ソースでhelloを書いたらどうなるかの...
-efg01は、APIも独自の仕様を選び、また内部のエンコードもgh...
-今回はC言語で書ける範囲でしか頑張らないようにしています...
-uxfは「簡単な割には結構いけている」を目指しています。x86...
-それに今や究極の小ささに関してはOSECPU-VMがあるので、efg...
** なぜuxfdlを付ける仕様を選んだのか?
-gccでprintfを普通に使うと、putsやputcharに置き換えるとい...
-また単にprintfを書けばいいということにすると、uxf生成プ...
-さらにC言語でprintfと書くと、COFF内のシンボル名では頭に...
** なぜ4バイトを書かずにsh8でエンコードしているのか?
-「シンプルを目指すのならsh8とかにしないで32ビットをその...
-そう考えて、だから可変長にすることこそ本質だとして、じゃ...
** uxfでCOFFの代用はできるか?
-今のuxfでは.rdataは記述できません。またデバッグ情報とか...
-まあちょっと仕様変更すれば.rdataやデバッグ情報を積める余...
* こめんと欄
#comment
ページ名: