8. 少し真面目にブートの話
BIOS (ext)
ISR
ROM BIOS
VIDEO BIOS
VIDEO RAM
BIOS DATA (ext)
RAM
BIOS DATA
BIOS
RAM
640KB
=0xa0000
1MB
=0x100000
① x86 startup address
=0xFFFF0
ここから CPU が実行スタート
② Network Bootstrap Program
Entry Point=0x7C00
ここからネットブートが開始
9. 普通のネットブート
BIOS (ext)
ISR
ROM BIOS
VIDEO BIOS
VIDEO RAM
BIOS DATA (ext)
RAM
BIOS DATA
BIOS
RAM
UNDI code/data
NBP
(ブートローダ)
PXE code/data/stack
UNDI/PXE runtime
普通は、 PC に(最近は
最初から)入ってる
UNDI/PXE ROM を使って、
指定したブートローダを
TFTP で送り込む
10. GPXE (+SYSLINUX) のネットブート
BIOS (ext)
ISR
ROM BIOS
VIDEO BIOS
VIDEO RAM
BIOS DATA (ext)
RAM
BIOS DATA
BIOS
RAM
UNDI code/data
NBP
(ブートローダ)
PXE code/data/stack
×××××××××××
gPXE は「ベンダの ROM は
ヘボで駄目杉なので」
TFTP で送り込まれると
UNDI/PXE を置き換えて、
自分 or 提携ブートローダを
動かす
UNDI/PXE runtime (gPXE)
11. 乗っ取ると何ができる?
PXE BIOS API のコール方法が呼び出し用
アドレス(=関数)1つ+ OPCODE なのを
逆用して、勝手に OPCODE を増やしている
普通の PXE API gPXE な PXE API
1. PXENV_TFTP_OPEN
2. PXENV_TFTP_READ
3. PXENV_UDP_OPEN
4. PXENV_UDP_WRITE
...
1. PXENV_TFTP_OPEN
2. PXENV_TFTP_READ
3. PXENV_UDP_OPEN
4. PXENV_UDP_WRITE
…
A. PXENV_FILE_OPEN
B. PXENV_FILE_EXEC
...