先頭8バイトがmagic number
とversion情報
残りが各種セクション情報
各種セクションは実行時に
必要な情報を持つ
8BTNNPEVMF
E NBHJDOVNCFS aBTN
WFSTJPO
TFDUJPODPEF
TFDUJPOTJ[F
BYY TFDUJPOEBUB
TFDUJPODPEF
TFDUJPOTJ[F
YY TFDUJPOEBUB
EYY
Slide 22
Slide 22 text
例)
type_section
関数シグネチャ情報
code_section
関数の命令群
Slide 23
Slide 23 text
TFDUJPO5ZQF
TFDUJPODPEF
TFDUJPOTJ[F
B OVNUZQFT
C GVOD
D OVNQBSBNT
EG J
FG J
G OVNSFTVMUT
G J
TFDUJPO$PEF
B TFDUJPODPEF
TFDUJPOTJ[F
OVNGVODUJPOT
GVODCPEZTJ[F
MPDBMEFDMDPVOU
B MPDBMHFU
C MPDBMJOEFY
D MPDBMHFU
E MPDBMJOEFY
FB JBEE
GC FOE
code section をデコード処理する例
TFDUJPO$PEF
B TFDUJPODPEF
TFDUJPOTJ[F
OVNGVODUJPOT
GVODCPEZTJ[F
MPDBMEFDMDPVOU
B MPDBMHFU
C MPDBMJOEFY
D MPDBMHFU
E MPDBMJOEFY
FB JBEE
GC FOE
Slide 26
Slide 26 text
実行時データ構造
Slide 27
Slide 27 text
Store
実行時に必要なインスタンス達を持つ
例)関数やメモリのインスタンス
Runtime
VMそのものと思ってOK
Runtime::stack
処理時の値を保持する
Runtime::call_stack
関数呼び出しのフレームを保持する
フレームごとに命令などの情報をもつ