3日目 リンク後のimgファイル比較 - HobbyOSs/opennask GitHub Wiki

3日目 リンク後のimgファイル比較

  • 作業記録のページ
    • 3日目以降、バイナリをリンクする必要があるのだが、その過程で元のosaskと差分があるのでその差を確認している

1箇所目 FAT12の仕様による差分

image

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箇所目 リンカが付加するファイル名の違い

image

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;
}

NASK環境からの解脱 - より

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からきれいにバイナリが入っている

NASK環境からの解脱 - より

# ここからは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  ................
# ここからは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  ................

image