【10/13追記】
ちょっとめも。意味わかってないけど...VMwareでやったので実機とは違うかも。
Knoppix、SystemRescueCd、BG-Rescue Linux、INSERT などのLiveCDにも入ってます。
ブートストラップの比較とNTシグネチャ関連とか。MBRのoffset 0x01B5
から0x01BD
(パーティションテーブルの直前9バイト)をdump(リトルエンディアンで)。
■ ms-sys
-m
,--mbr
Write a Windows 2000/XP/2003 MBR to device-
ブートストラップはWindows XPと全く同じ。379バイト。NTシグネチャはさわらない?offset 0x01B5から
2C 44 63
となる?- 実行前
00 00 00 59 49 0C 00 00 00
- 実行後
2C 44 63 59 49 0C 00 00 00
- 実行前 (zero)
00 00 00 00 00 00 00 00 00
- 実行後
2C 44 63 00 00 00 00 00 00
- 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
- 実行後
2C 44 63 14 49 F2 2C CB 63
- ブートスラップがoffset 0x017Aまで?(379バイト?)
- offset 0x017Bから0x014Bまで00
offset 0x014Coffset 0x01B5から2C 44 63で上書き- あと6バイトそのまま
- 440バイト上書き
-9
,--mbr95b
Write a Windows 95B/98/98SE/ME MBR to device-
ブートスラップは98SEの
fdisk /mbr
とほぼ同じ。offset 0x00DAから0x00DFが98fdiskと若干違うことがあった。98では00だがこっちはたまに4F 74 4E 32 E4 8A
。offset 0x015Dまでとすると350バイト。0x0189までだと394バイト?NTシグネチャはそのまま。
offset 0x01B5 - 0x01B7
が00に。- 実行前
2C 44 63 59 49 0C 00 00 00
- 実行後
00 00 00 59 49 0C 00 00 00
- 実行前 (zero)
00 00 00 00 00 00 00 00 00
- 実行後
00 00 00 00 00 00 00 00 00
- 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
- 実行後
00 00 00 14 49 F2 2C CB 63
- ブートスラップがoffset 0x015Dまで?(350バイト?)
- offset 0x0183 - 0x0189が
8B FC 1E 57 8B F5 CB
- offset 0x01B8から0x01BDそのまま
- 他00
- 440バイト上書き
-s
,--mbrsyslinux
Write a public domain syslinux MBR to device-
ブートストラップは300バイト?変化なしかな?
- 実行前
2C 44 63 59 49 0C 00 00 00
- 実行後
2C 44 63 59 49 0C 00 00 00
- 実行前 (zero)
00 00 00 00 00 00 00 00 00
- 実行後
00 00 00 00 00 00 00 00 00
- 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
- 実行後
F4 FE 62 14 49 F2 2C CB 63
- offset 0x012Bまで上書き(300バイト?)
- あとはそのまま
-z, --mbrzero Write an empty (zeroed) MBR to device
-
MBRの先頭から446バイトが 00 となりました。パーティションテーブルはそのまま。
■ Windows 98SEのfdisk(fdisk /mbr)
ブートストラップはoffset 0x015Dまでとすると350バイト、0x0189までとすると394バイト?更新版でもブートストラップの内容は同じ。
- 実行前
2C 44 63 59 49 0C 00 00 00
- 実行後
00 00 00 00 00 00 00 00 00
- 実行前 (zero)
00 00 00 00 00 00 00 00 00
- 実行後
00 00 00 00 00 00 00 00 00
- 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
- 実行後
00 00 00 00 00 00 00 00 00
- ブートストラップはoffset 0x015Dまでとすると350バイト?(0x0189までだと394バイト?)
- offset 0x0183 - 0x0189が
8B FC 1E 57 8B F5 CB
- あと00で上書き
- 446バイトすべて上書きされる
■ FreeDOSのfdisk(fdisk /mbr)
ブートストラップはoffset 0x010Eまでとすると271バイト?9バイトオールクリア?
- 実行前 (zero)
2C 44 63 59 49 0C 00 00 00
- 実行後
00 00 00 00 00 00 00 00 00
- 実行前
00 00 00 00 00 00 00 00 00
- 実行後
00 00 00 00 00 00 00 00 00
- 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
- 実行後
00 00 00 00 00 00 00 00 63
- ブートストラップはoffset 0x010Eまで(271バイト?)
- あと00で上書き
- offset 0x01BDは?
- 446(445?)バイトすべて上書きされる
■ Linuxのfdiskとか
- fdisk
-
Linuxのfdiskでは先頭446バイトには何も書き込まれない。GPartedでNTFSフォーマットすると先頭へは75バイト書き込み。
- GPartedでNTFSフォーマット
00,00,00,81,38,0D,00,00,00
- syslinuxのmbr.bin
-
# dd if=/usr/lib/syslinux/mbr.bin of=/dev/hda bs=446 count=1
先頭
303バイト304バイト?のみ書き込みのみ- 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
- 実行後
F4 FE 62 14 49 F2 2C CB 63
- offset 0x012Fまで上書き(304バイト?)
- あとはそのまま
- install-mbrコマンド
-
先頭446バイト書き込み。内容はWindowsのものとは違う。(パーティションテーブル部分は変化なし。ブートシグネチャが無い場合はMBRの最後に0xAA55書き込み)
- install-mbr /dev/hda
00,80,00,00,00,00,00,A8,01
- 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
- 実行後
00 80 00 00 00 00 00 A8 01
- 446バイトすべて上書き