3日目 リンク後のimgファイル比較 - HobbyOSs/opennask GitHub Wiki
3日目 リンク後のimgファイル比較
- 作業記録のページ
- 3日目以降、バイナリをリンクする必要があるのだが、その過程で元のosaskと差分があるのでその差を確認している
1箇所目 FAT12の仕様による差分
- [feature/adjust osask style] Fix binary format as same as osask で修正
- mformatのコマンドラインオプションで必要なボリュームラベル、ボリュームシリアル番号を設定しosaskと合わせている
3日目のアセンブラをダンプ(前編)- harib00a に詳細を書きました。
-
ボリューム ラベル
HARIBOTEOS
の部分mformat -l HARIBOTEOS
-
ボリューム シリアル番号
0xffffffff
の部分mformat -N 0xffffffff
-
全セクター数(Large Sector)
0x400b0000
の部分-t Specifies the number of tracks on the disk.
-T Specifies the number of total sectors on the disk. Only one of these 2 options may be specified (tracks or total sectors)
mformat -T 2880 -t 160
- このコマンドを打っても、全セクター数(Large Sector)には値は入らない。「FAT12/16ボリュームで総セクタ数が0x10000未満のとき、このフィールドは無効値(0)でなければならなず、真の値はBPB_TotSec16に設定される。」から。
全セクター数 : 2880
トラックあたりのセクター数 : 18
トラック数 : 2880/18 = 160
00000020: 400b 0000 0000 29ff ffff ff48 4152 4942 @.....)....HARIB
00000030: 4f54 454f 5320 4641 5431 3220 2020 0000 OTEOS FAT12 ..
2箇所目 リンカが付加するファイル名の違い
FAT12
の仕様らしい。指し示す場所がずれてる?- Gaku's Space Wiki - FAT ( File Allocation Table )
- 1byte目は FAT ID で F0 とか F8 とか、続く 2byte は FF である。
- 他を直したら直りそうなのでスルー
0001000 | f0 ff ff ff 0f 00 00 00 00 00 00 00 00 00 00 00
0012000 | f0 ff ff ff 0f 00 00 00 00 00 00 00 00 00 00 00
2箇所目の後半、0x00002600
バイト以降を見ると明らかに違いがある
OS自作入門 p.372によれば、どうやらこれは構造体らしい。p.701ページにそれの中身が書いてあるので書き写す。
struct FILEINFO {
unsigned char name[8], ext[3], type;
char reserve[10];
unsigned short time, date, clustno;
unsinged int size;
}
0x2600
以降は結合したファイルの名前とかが入ってそうだ。正確な仕様は未調査。
haribote.img(正規版)
00002600: 4841 5249 424f 5445 5359 5320 0000 0000 HARIBOTESYS ....
00002610: 0000 0000 0000 5563 6749 0200 6401 0000 ......UcgI..d...
00002620: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00002630: 0000 0000 0000 0000 0000 0000 0000 0000 ................
haribote.img(不正規版)
- ここも、
mformat -l HARIBOTESYS
で指定すれば修正できるが、修正しなくても問題ないように見える
- ここも、
00002600: 4841 5249 424f 5445 4f53 2008 0000 f1ba HARIBOTEOS .....
00002610: 7549 7549 0000 f1ba 7549 0000 0000 0000 uIuI....uI......
00002620: 4f53 2020 2020 2020 5359 5320 1800 f1ba OS SYS ....
00002630: 7549 7549 0000 f1ba 7549 0200 8004 0000 uIuI....uI......
3箇所目 gccが出力するオブジェクトファイルの違い
最後はわりと明確で、単純にgccが出力するオブジェクトファイルがデカすぎる。余計なものが入りまくっているので動かないだけのようだ。
haribote.img(正規版)
- さっきのメモリマップの通り、
0x4200
からきれいにバイナリが入っている
- さっきのメモリマップの通り、
# ここからはasmhead.nasの内容
00004200: b013 b400 cd10 c606 f20f 08c7 06f4 0f40 ...............@
00004210: 01c7 06f6 0fc8 0066 c706 f80f 0000 0a00 .......f........
00004220: b402 cd16 a2f1 0fb0 ffe6 2190 e6a1 fae8 ..........!.....
00004230: b500 b0d1 e664 e8ae 00b0 dfe6 60e8 a700 .....d......`...
00004240: 0f01 162a c30f 20c0 6625 ffff ff7f 6683 ...*.. .f%....f.
00004250: c801 0f22 c0eb 00b8 0800 8ed8 8ec0 8ee0 ..."............
00004260: 8ee8 8ed0 66be 30c3 0000 66bf 0000 2800 ....f.0...f...(.
00004270: 66b9 0000 0200 e875 0066 be00 7c00 0066 f......u.f..|..f
00004280: bf00 0010 0066 b980 0000 00e8 6000 66be .....f......`.f.
00004290: 0082 0000 66bf 0002 1000 66b9 0000 0000 ....f.....f.....
000042a0: 8a0e f00f 6669 c900 1200 0066 81e9 8000 ....fi.....f....
000042b0: 0000 e839 0066 bb00 0028 0067 668b 4b10 ...9.f...(.gf.K.
000042c0: 6683 c103 66c1 e902 7410 6766 8b73 1466 f...f...t.gf.s.f
000042d0: 01de 6766 8b7b 0ce8 1400 6766 8b63 0c66 ..gf.{....gf.c.f
000042e0: ea1b 0000 0010 00e4 6424 0275 fac3 6766 ........d$.u..gf
000042f0: 8b06 6683 c604 6766 8907 6683 c704 6683 ..f...gf..f...f.
00004300: e901 75ea c300 0000 0000 0000 0000 0000 ..u.............
00004310: 0000 0000 0000 0000 ffff 0000 0092 cf00 ................
00004320: ffff 0000 289a 4700 0000 1700 10c3 0000 ....(.G.........
# ここからはbootpack.c
00004330: 0000 3100 4861 7269 0000 0000 0000 3100 ..1.Hari......1.
00004340: 0000 0000 3400 0000 0000 00e9 0900 0000 ....4...........
00004350: 0000 3100 5589 e5eb fe55 89e5 5de9 f2ff ..1.U....U..]...
00004360: ffff 0000 0000 0000 0000 0000 0000 0000 ................
haribote.img(不正規版)
- やっぱり途中で
intel2gas
を通さないとダメみたいです… - Software optimization resources にある objconvを使ったほうがよさそう
gcc
でオブジェクト生成 → オブジェクトからMASM形式のアセンブラ生成
- やっぱり途中で
# ここからはasmhead.nasの内容
00004200: b013 b400 cd10 c606 f20f 08c7 06f4 0f40 ...............@
00004210: 01c7 06f6 0fc8 0066 c706 f80f 0000 0a00 .......f........
00004220: b402 cd16 a2f1 0fb0 ffe6 2190 e6a1 fae8 ..........!.....
00004230: b500 b0d1 e664 e8ae 00b0 dfe6 60e8 a700 .....d......`...
00004240: 0f01 162a c30f 20c0 6625 ffff ff7f 6683 ...*.. .f%....f.
00004250: c801 0f22 c0eb 00b8 0800 8ed8 8ec0 8ee0 ..."............
00004260: 8ee8 8ed0 66be 30c3 0000 66bf 0000 2800 ....f.0...f...(.
00004270: 66b9 0000 0200 e875 0066 be00 7c00 0066 f......u.f..|..f
00004280: bf00 0010 0066 b980 0000 00e8 6000 66be .....f......`.f.
00004290: 0082 0000 66bf 0002 1000 66b9 0000 0000 ....f.....f.....
000042a0: 8a0e f00f 6669 c900 1200 0066 81e9 8000 ....fi.....f....
000042b0: 0000 e839 0066 bb00 0028 0067 668b 4b10 ...9.f...(.gf.K.
000042c0: 6683 c103 66c1 e902 7410 6766 8b73 1466 f...f...t.gf.s.f
000042d0: 01de 6766 8b7b 0ce8 1400 6766 8b63 0c66 ..gf.{....gf.c.f
000042e0: ea1b 0000 0010 00e4 6424 0275 fac3 6766 ........d$.u..gf
000042f0: 8b06 6683 c604 6766 8907 6683 c704 6683 ..f...gf..f...f.
00004300: e901 75ea c300 0000 0000 0000 0000 0000 ..u.............
00004310: 0000 0000 0000 0000 ffff 0000 0092 cf00 ................
00004320: ffff 0000 289a 4700 0000 1700 10c3 0000 ....(.G.........
# ここからはbootpack.c (.ELFのシグネチャががが…)
00004330: 7f45 4c46 0101 0100 0000 0000 0000 0000 .ELF............
00004340: 0100 0300 0100 0000 0000 0000 0000 0000 ................
00004350: 9801 0000 0000 0000 3400 0000 0000 2800 ........4.....(.
00004360: 0b00 0a00 5589 e5eb fe00 4743 433a 2028 ....U.....GCC: (
00004370: 4465 6269 616e 2035 2e34 2e31 2d33 2920 Debian 5.4.1-3)
00004380: 352e 342e 3120 3230 3136 3130 3139 0000 5.4.1 20161019..
00004390: 1400 0000 0000 0000 017a 5200 017c 0801 .........zR..|..
000043a0: 1b0c 0404 8801 0000 1800 0000 1c00 0000 ................
000043b0: 0000 0000 0500 0000 0041 0e08 8502 420d .........A....B.
000043c0: 0500 0000 0000 0000 0000 0000 0000 0000 ................
000043d0: 0000 0000 0100 0000 0000 0000 0000 0000 ................
000043e0: 0400 f1ff 0000 0000 0000 0000 0000 0000 ................
000043f0: 0300 0100 0000 0000 0000 0000 0000 0000 ................
00004400: 0300 0200 0000 0000 0000 0000 0000 0000 ................
00004410: 0300 0300 0000 0000 0000 0000 0000 0000 ................
00004420: 0300 0500 0000 0000 0000 0000 0000 0000 ................
00004430: 0300 0600 0000 0000 0000 0000 0000 0000 ................
00004440: 0300 0400 0c00 0000 0000 0000 0500 0000 ................
00004450: 1200 0100 0062 6f6f 7470 6163 6b2e 6300 .....bootpack.c.
00004460: 4861 7269 4d61 696e 0000 0000 2000 0000 HariMain.... ...
00004470: 0202 0000 002e 7379 6d74 6162 002e 7374 ......symtab..st
00004480: 7274 6162 002e 7368 7374 7274 6162 002e rtab..shstrtab..
00004490: 7465 7874 002e 6461 7461 002e 6273 7300 text..data..bss.
000044a0: 2e63 6f6d 6d65 6e74 002e 6e6f 7465 2e47 .comment..note.G
000044b0: 4e55 2d73 7461 636b 002e 7265 6c2e 6568 NU-stack..rel.eh
000044c0: 5f66 7261 6d65 0000 0000 0000 0000 0000 _frame..........
000044d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000044e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000044f0: 1b00 0000 0100 0000 0600 0000 0000 0000 ................
00004500: 3400 0000 0500 0000 0000 0000 0000 0000 4...............
00004510: 0100 0000 0000 0000 2100 0000 0100 0000 ........!.......
00004520: 0300 0000 0000 0000 3900 0000 0000 0000 ........9.......
00004530: 0000 0000 0000 0000 0100 0000 0000 0000 ................
00004540: 2700 0000 0800 0000 0300 0000 0000 0000 '...............
00004550: 3900 0000 0000 0000 0000 0000 0000 0000 9...............
00004560: 0100 0000 0000 0000 2c00 0000 0100 0000 ........,.......
00004570: 3000 0000 0000 0000 3900 0000 2600 0000 0.......9...&...
00004580: 0000 0000 0000 0000 0100 0000 0100 0000 ................
00004590: 3500 0000 0100 0000 0000 0000 0000 0000 5...............
000045a0: 5f00 0000 0000 0000 0000 0000 0000 0000 _...............
000045b0: 0100 0000 0000 0000 4900 0000 0100 0000 ........I.......
000045c0: 0200 0000 0000 0000 6000 0000 3400 0000 ........`...4...
000045d0: 0000 0000 0000 0000 0400 0000 0000 0000 ................
000045e0: 4500 0000 0900 0000 4000 0000 0000 0000 E.......@.......
000045f0: 3c01 0000 0800 0000 0800 0000 0600 0000 <...............
00004600: 0400 0000 0800 0000 0100 0000 0200 0000 ................
00004610: 0000 0000 0000 0000 9400 0000 9000 0000 ................
00004620: 0900 0000 0800 0000 0400 0000 1000 0000 ................
00004630: 0900 0000 0300 0000 0000 0000 0000 0000 ................
00004640: 2401 0000 1500 0000 0000 0000 0000 0000 $...............
00004650: 0100 0000 0000 0000 1100 0000 0300 0000 ................
00004660: 0000 0000 0000 0000 4401 0000 5300 0000 ........D...S...
00004670: 0000 0000 0000 0000 0100 0000 0000 0000 ................