MBR関連コマンド-debian

日記を消してしまったのと、
毎回この手の「なんだっけ?」でググると自分のページが出る()という状況なのでまとめます

MBRを取得する

$ sudo dd if=/dev/hda of=mbr.img bs=512 count=1

バイナリを見る

$ od -tx1 mbr.img

バイナリと一緒にASCII文字も読む

$ hexdump -C mbr.img

可読な文字だけ表示する

$ strings mbr.img

4つの基本パーティションを確認する

$ od -tx1 -j 446 -N 64 mbr.img

起動フラグがアクティブ「0x80」なパーティションを確認する
「0x00」は非アクティブ(ブート不可)

$ od -tx1 -j 446 -N 64 mbr.img | awk -F" " '{print $2}' | nl

ブートシグニチャが「0xAA55(表示は 55 aa)」でMBRが有効になっていることを確認する

$ od -tx1 -j 510 -N 2 mbr.img

Stage1のアセンブラで言う「jmp命令(表示は eb 48)」を確認する

$ od -tx1 -N 2 mbr.img


MBRからパーティション情報を除いて出力する

$ dd if=mbr.img of=a.out bs=446 count=1

逆アセンブルをして、Stage1全体のコードを確認する

$ objdump -D -b binary -d -mi386 a.out

各パーティションのCHSの開始位置を確認する

$ od -tx1 -j 446 -N 64 mbr.img | awk -F" " '{print $3" "$4" "$5}' | nl | head -4

各パーティションのパーティションタイプを確認する

$ od -tx1 -j 446 -N 64 mbr.img | awk -F" " '{print $6}' | nl | head -4

各パーティションのCHSの終了位置を確認する

$ od -tx1 -j 446 -N 64 mbr.img | awk -F" " '{print $7" "$8" "$9}' | nl | head -4

各パーティションのLBAの開始位置を確認する

$ od -tx1 -j 446 -N 64 mbr.img | awk -F" " '{print $13" "$12" "$11" "$10}' | nl | head -4

各パーティションのLBAの総セクタ数を確認する

$ od -tx1 -j 446 -N 64 mbr.img | awk -F" " '{print $17" "$16" "$15" "$14}' | nl | head -4

パーティション部分だけを書き出す(of=part.img でも良い)

$ dd if=mbr.img bs=1 skip=446 count=64 > part.img

CHSの始点と終点を確認する

$ od -tx1 part.img | awk -F" " '{print $3 $4 $5" "$7 $8 $9}' | tr '[a-f]' '[A-F]' | \
  for chs in `xargs`; \
  do \
     H=0;S=0;CH=0;CL=0;C=0;\
     let H="0x${chs}/0x010000"; \
     let S="0x${chs}%0x010000/0x0100%0x040"; \
     let CH=0x"${chs}%010000/0x0100/0x040";  \
     let CL="0x${chs}%0100";  \
     let C="0x${CH}*0x0100+${CL}";\
     echo -ne "C=${C}\t0x";dc -e "10i 16o ${C} p"  | echo -ne `xargs`"\t:"; \
     echo -ne "\tH=${H}\t0x";dc -e "10i 16o ${H} p" | echo -ne `xargs`"\t:"; \
     echo -ne "\tS=${S}\t0x";dc -e "10i 16o ${S} p"   | echo -ne `xargs`"\t:"; \
    echo "0x${chs}"; \
 done;echo ""

LBAの始点と総セクタ数を確認する

$ od -tx1 part.img | awk -F" " '{print $13 $12 $11 $10" "$17 $16 $15 $14}' | tr '[a-f]' '[A-F]' | \
  for lba in `xargs`; \
  do \
    L=0; \
    let L="0x${lba}"; \
    echo -ne "L=${L}\t0x";dc -e "10i 16o ${L} p"  | echo -ne `xargs`"\t:"; \
    echo "0x${lba}"; \
  done;echo ""

LBAの表示結果をfdsik結果と見比べる

$ sudo fdisk -lu /dev/hda