Submit Search
Upload
【学習メモ#5th】12ステップで作る組込みOS自作入門
•
1 like
•
2,568 views
S
sandai
Follow
12ステップで作る組込みOS自作入門 http://www.amazon.co.jp/dp/4877832394/ 坂井 弘亮(著) カットシステム
Read less
Read more
Technology
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 33
Download now
Download to read offline
Recommended
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
sandai
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
sandai
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
sandai
Recommended
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
sandai
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
sandai
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
sandai
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
Kazuki Onishi
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Kazuki Onishi
あるコンテキストスイッチの話
あるコンテキストスイッチの話
nullnilaki
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
d-kami x86-2
d-kami x86-2
Daisuke Kamikawa
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
Yuto Takei
[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル
Yuto Takei
Altanative macro
Altanative macro
Motohiro KOSAKI
リアルタイムOsのカスタマイズ
リアルタイムOsのカスタマイズ
Kazuhiro Takahashi
d-kami x86-1
d-kami x86-1
Daisuke Kamikawa
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
Hirotaka Kawata
X86opti01 nothingcosmos
X86opti01 nothingcosmos
nothingcosmos
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
mao999
シェル入門
シェル入門
ina job
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
Yuto Takei
とあるDBAの黒い画面(ターミナル)
とあるDBAの黒い画面(ターミナル)
Kazuhiro Yoshikawa
core dumpでcode golf
core dumpでcode golf
Nomura Yusuke
とあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)II
Kazuhiro Yoshikawa
マイコンでマルチタスク
マイコンでマルチタスク
Katsuhiko Terawaki
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
Kishi Shundo
More Related Content
What's hot
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
Kazuki Onishi
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Kazuki Onishi
あるコンテキストスイッチの話
あるコンテキストスイッチの話
nullnilaki
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
d-kami x86-2
d-kami x86-2
Daisuke Kamikawa
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
Yuto Takei
[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル
Yuto Takei
Altanative macro
Altanative macro
Motohiro KOSAKI
リアルタイムOsのカスタマイズ
リアルタイムOsのカスタマイズ
Kazuhiro Takahashi
d-kami x86-1
d-kami x86-1
Daisuke Kamikawa
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
Hirotaka Kawata
X86opti01 nothingcosmos
X86opti01 nothingcosmos
nothingcosmos
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
mao999
シェル入門
シェル入門
ina job
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
Yuto Takei
とあるDBAの黒い画面(ターミナル)
とあるDBAの黒い画面(ターミナル)
Kazuhiro Yoshikawa
core dumpでcode golf
core dumpでcode golf
Nomura Yusuke
とあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)II
Kazuhiro Yoshikawa
What's hot
(20)
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
あるコンテキストスイッチの話
あるコンテキストスイッチの話
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
x86とコンテキストスイッチ
x86とコンテキストスイッチ
d-kami x86-2
d-kami x86-2
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル
Altanative macro
Altanative macro
リアルタイムOsのカスタマイズ
リアルタイムOsのカスタマイズ
d-kami x86-1
d-kami x86-1
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
X86opti01 nothingcosmos
X86opti01 nothingcosmos
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
シェル入門
シェル入門
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
とあるDBAの黒い画面(ターミナル)
とあるDBAの黒い画面(ターミナル)
core dumpでcode golf
core dumpでcode golf
とあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)II
Viewers also liked
マイコンでマルチタスク
マイコンでマルチタスク
Katsuhiko Terawaki
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
Kishi Shundo
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
Yuma Ohgami
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
kozossakai
やってよかったOS作り
やってよかったOS作り
Hidemi Kawai
低レイヤー入門
低レイヤー入門
demuyan
人工知能概論 1
人工知能概論 1
Tadahiro Taniguchi
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
Hirotaka Kawata
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
Yuma Ohgami
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
Nisei Kimura
C++でできる!OS自作入門
C++でできる!OS自作入門
uchan_nos
Ctfのためのpython入門
Ctfのためのpython入門
shiracamus
ハッキング実演
ハッキング実演
Ken Ogura
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
kikuchan98
Viewers also liked
(15)
マイコンでマルチタスク
マイコンでマルチタスク
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
やってよかったOS作り
やってよかったOS作り
低レイヤー入門
低レイヤー入門
人工知能概論 1
人工知能概論 1
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
C++でできる!OS自作入門
C++でできる!OS自作入門
Ctfのためのpython入門
Ctfのためのpython入門
ハッキング実演
ハッキング実演
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
Similar to 【学習メモ#5th】12ステップで作る組込みOS自作入門
ELFの動的リンク
ELFの動的リンク
7shi
Hello world make
Hello world make
mitsu1119
PHP基礎勉強会
PHP基礎勉強会
Yuji Otani
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
uchan_nos
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
ericsagnes
BBBBB
BBBBB
arase_utagoe
1MB
1MB
arase_utagoe
OpenDocument interoperability test workshop
OpenDocument interoperability test workshop
Makoto Takizawa
eZ Publishのextension開発チュートリアル
eZ Publishのextension開発チュートリアル
株式会社ミツエーリンクス
osc_tokyo20100226
osc_tokyo20100226
Shoken Fujisaki
Intalio Cloud Workshop
Intalio Cloud Workshop
Daisuke Sugai
Elf binary analysis_in_julia
Elf binary analysis_in_julia
SinaiPearl
1st step LogicFlow
1st step LogicFlow
Tomoyuki Obi
いいパブッ!! - よくわかるEPUB 3
いいパブッ!! - よくわかるEPUB 3
Hiroshi Takase
Plan of "File Authority Designer" Ver. 2
Plan of "File Authority Designer" Ver. 2
Seiji Noro
「文書管理システム-作成用キット」の紹介, Introduction of "Document management system-Creation Kit"
「文書管理システム-作成用キット」の紹介, Introduction of "Document management system-Creation Kit"
ssuser285ddb
20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow
Tomoyuki Obi
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
エピック・ゲームズ・ジャパン Epic Games Japan
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
Daiyu Hatakeyama
デブサミ2008 .NETの仕組み
デブサミ2008 .NETの仕組み
Takeshi Shinmura
Similar to 【学習メモ#5th】12ステップで作る組込みOS自作入門
(20)
ELFの動的リンク
ELFの動的リンク
Hello world make
Hello world make
PHP基礎勉強会
PHP基礎勉強会
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
BBBBB
BBBBB
1MB
1MB
OpenDocument interoperability test workshop
OpenDocument interoperability test workshop
eZ Publishのextension開発チュートリアル
eZ Publishのextension開発チュートリアル
osc_tokyo20100226
osc_tokyo20100226
Intalio Cloud Workshop
Intalio Cloud Workshop
Elf binary analysis_in_julia
Elf binary analysis_in_julia
1st step LogicFlow
1st step LogicFlow
いいパブッ!! - よくわかるEPUB 3
いいパブッ!! - よくわかるEPUB 3
Plan of "File Authority Designer" Ver. 2
Plan of "File Authority Designer" Ver. 2
「文書管理システム-作成用キット」の紹介, Introduction of "Document management system-Creation Kit"
「文書管理システム-作成用キット」の紹介, Introduction of "Document management system-Creation Kit"
20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
デブサミ2008 .NETの仕組み
デブサミ2008 .NETの仕組み
Recently uploaded
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
Recently uploaded
(8)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
【学習メモ#5th】12ステップで作る組込みOS自作入門
1.
12ステップで作る組込みOS自作入門
5thステップ @sandai
2.
【参考書籍】 12ステップで作る組込みOS自作入門 【内容】 1ステップずつ、実際に動かしながらプログラムを発展さ せていく方式で無理なく学べる。OSやハードウェアに詳 しくない方にも理解できるよう に十分な説明を提供 坂井 弘亮(著) カットシステム(2010/5) 【税込価格】 4,410円 【サポートページ】 http://kozos.jp/books/makeos/
3.
もくじ 1.ELF形式 2.各種ヘッダ解説 3.プログラムの修正と追加と実行 4.まとめ
4.
1.ELF形式
5.
オブジェクト・ファイル・フォー
マット ● これまで作成してきた実行形式ファイルは単な るベタバイナリになっているわけではなく、内 部は特定のフォーマットで記述されている – これを一般にオブジェクト・ファイル・フォーマッ トと呼ぶ ● オブジェクト・ファイル・フォーマットはいく つか種類があり、a.out形式やEXE形式、COFF形 式など存在するが、一般的なのはELF形式
6.
ELF形式 ●
gccは標準でコンパイル・リンクで出力する ファイルはELF形式で作成する ● ELF形式が一番扱いやすく問題ない形式らしい
7.
リンクとリンカ ●
複数のオブジェクト・ファイルを結合して実行 形式ファイルを生成するのをリンクと言う – リンクはリンカによって行われる ● 個々のオブジェクト・ファイルもELF形式で内 部のセクションの種類は実行形式ファイルと同 じ。 – それぞれが.dataや.textを持っている ● つまりリンクとは、そういった個々のオブジェ クト・ファイルのセクションをまとめてひとつ の実行形式ファイルにするやつ
8.
セグメントとローダ ●
セグメントはリンク後に生成される – 実行形式ファイルになったときに生成される ● セグメントはローダで利用 ● ローダとは、実行形式ファイルのイメージをメ モリ上に展開する作業を行うプログラム ● ローダはメモリ上に展開するときに、セグメン 情報を見てその通りにメモリ上に展開する – 展開するときはもちろんセグメント単位で行う
9.
セクションとセグメントの違い ●
セクションは実行形式ファイルを作成するリン カのためにある – 個々のオブジェクト・ファイルを結合して実行形式 ファイルを作成するために、といった方が良いかも しれない ● セグメントはローダのためにある – メモリ上に展開するときにセグメント情報の通りに 行う – あとメモリ管理の方式の1つとしても利用されてい ると思ったけどこれは汎用OSだけ?それともそれと は違うセグメントのことか?調べてもわからんかっ た
10.
ELF形式の内部構造 ●
ELF形式のファイルは先頭にELFヘッダを持ち、 内部はセクションとセグメントでそれぞれ独立 した単位で分割されている ● セクションとセグメントの情報はセクション・ ヘッダ、プログラム・ヘッダというヘッダで管 理されている – 具体的なイメージ図は次ページを参照
11.
ELF形式の内部構造の図 169頁 図5.1 ELF形式の内部構造
より
12.
ELF形式のヘッダ情報 ●
ファイルの先頭はELFヘッダ – プログラム・ヘッダ・テーブルやセクション・ヘッ ダ・テーブルのアドレス位置やヘッダの個数などを 知ることができる ● その次にセグメントの情報を管理しているプロ グラム・ヘッダ・テーブル ● 終端にセクション情報を管理しているセクショ ン・ヘッダ・テーブル
13.
セクション・ヘッダとプログラム・
ヘッダ ● ファイル内部ではセクション・ヘッダとプログ ラム・ヘッダによってセクションとセグメント はそれぞれ独立して区分けされ管理している – 当然ヘッダ同士も独立している ● しかし先ほどの図を見る限りではセクションは セグメントに含まれる構成となっている ● これは複数のセクションをひとつのセグメント に含めることで、似た役割をもつセクションを まとめてメモリ上に展開することができるから – 必ずしもセクションがセグメントに含まれる必要は ないが、こっちの方が便利ね
14.
セクションとセグメントのまとめ ●
セクションはリンカが、セグメントはローダが 参照するもの ● リンク前のオブジェクト・ファイルはセグメン トを持たないし、プログラム・ヘッダもない ● リンク後の実行形式ファイルではセクションも セグメントもあるが、この状態でセクションを 削っても実行に問題はない ● どっちも区分けしている感じが似ているけれ ど、それぞれ役割や目的が違う
15.
2.各種ヘッダ解説
16.
ELFヘッダ ●
readelf -a kzload.elfで解析した結果を次の ページに掲載 – 「ELF Header:」の部分がヘッダ領域 ● ELFファイルの先頭に付加されるヘッダなので ELFヘッダと呼ぶ
17.
ELFヘッダ解析部分 ELF Header:
Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, big endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Renesas H8/300 Version: 0x1 Entry point address: 0x282 Start of program headers: 52 (bytes into file) Start of section headers: 2352 (bytes into file) Flags: 0x810000 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 3 Size of section headers: 40 (bytes) Number of section headers: 10 Section header string table index: 7
18.
マジック・ナンバ ●
ヘッダの先頭にある16バイトの識別領域である Magicは、ELFフォーマットのバージョンやOSの 種別などが格納されている – ファイルやデータの種別するために先頭に付加され る数値データを一般にマジック・ナンバと呼ぶ ● 先頭4バイトには必ず「7f 45 4c 46」(0x7f 'E' 'L' 'F')というデータが格納されていて、 これを見ることでそのファイルがELF形式であ ると判断することができる
19.
マジック・ナンバの識別情報 ●
それぞれのバイトデータの意味は以下の通り 171頁 図5.1 先頭16バイトの識別情報 より
20.
マジック・ナンバがある理由 ●
識別情報として最初に確認できるように先頭に バイト単位で配置している – これらの情報を識別した後でないとデータを正しく 読むことができないから ● 9~15のバイトは予約領域、リザーブ領域などと 呼ぶ – 将来的にELF形式が拡張されて何か情報が追加され ても問題ないように用意されている
21.
その他のELFヘッダの意味 172頁 表5.2 ELFヘッダの意味
より
22.
セクション・ヘッダ・テーブル ●
セクションの情報を管理しているヘッダの配列 Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .vectors PROGBITS 00000000 000094 000100 00 WA 0 0 4 [ 2] .text PROGBITS 00000100 000194 000654 00 AX 0 0 2 [ 3] .rodata PROGBITS 00000754 0007e8 0000a4 00 A 0 0 4 [ 4] .data PROGBITS 00fffc20 00088c 000004 00 WA 0 0 4 [ 5] .bss NOBITS 00fffc24 000890 000014 00 WA 0 0 4 [ 6] .comment PROGBITS 00000000 000890 00005a 00 0 0 1 [ 7] .shstrtab STRTAB 00000000 0008ea 000046 00 0 0 1 [ 8] .symtab SYMTAB 00000000 000ac0 0006c0 10 9 76 4 [ 9] .strtab STRTAB 00000000 001180 000250 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific)
23.
セクション・ヘッダの項目 174頁 表5.3 セクション・ヘッダの意味
より
24.
セクション・ヘッダ解説 ●
セクション名は可変長なのでヘッダにそのまま 格納されていない – .shstrtabセクションにまとめて格納 ● 重要なのはアドレス(Addr)、セクションの位置 (Off)、セクションのサイズ(size) ● アドレスはセクションが配置されている位置 – いわゆるVAにあたる。.dataや.bssはRAM上に配置さ れているアドレス ● セクションの位置やサイズは、ELFファイル内 でどの部分がそのセクションとなるかを表して いる
25.
プログラム・ヘッダ・テーブル ●
セグメントの情報を管理しているヘッダの配列 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align LOAD 0x000094 0x00000000 0x00000000 0x00100 0x00100 RW 0x1 LOAD 0x000194 0x00000100 0x00000100 0x006f8 0x006f8 R E 0x1 LOAD 0x00088c 0x00fffc20 0x000007f8 0x00004 0x00018 RW 0x1 Section to Segment mapping: Segment Sections... 00 .vectors 01 .text .rodata 02 .data .bss
26.
プログラム・ヘッダの項目 176頁 表5.4 プログラム・ヘッダの意味
より
27.
プログラム・ヘッダ解説 ●
Type – LOADはメモリ上にロードされるセグメントというこ と。他に、動的リンク情報やプログラム・ヘッダ自 身がある ● Offset – ELFファイルの内部でのセグメント位置 ● FilSiz、MemSiz – ファイル中のサイズと、メモリ上のサイズ – 必ずしも同じ大きさではない
28.
3.プログラムの修正と追加と実行
29.
プログラムの修正と追加 ●
追加ファイル – elf.h、elf.c...ELF形式の解析 ● 修正ファイル – main.c...ELF形式の解析コマンド追加 – Makefile...elf.oをコンパイル対象にする ● 修正部分はrunコマンド追加しただけ – ELFファイルのうち、セグメント情報を表示するコ マンド
30.
elf.c ●
今回はkzload.elfのセグメント情報をターミナ ルに表示するプログラムになっている ● 構造体が大きいのでわかりにくい – 構造体はELFヘッダの部分と、プログラムヘッダの 部分を取得する感じになっている – その構造体のデータを表示するだけ ● たぶん次からELFファイルをメモリに展開する プログラムになるんだと思う
31.
セクション・ヘッダが末尾の理由 ●
プログラム・ヘッダがELFファイルの先頭付近 にあるのは、ファイルをダウンロードしながら メモリにロードできるようにするため – バッファ領域が小さいときはこういった形になる ● メモリの配置先情報を最初に確認できるように してるわけ ● セクション・ヘッダが末尾なのはロードに必要 ないから。サイズ節約やメモリ節約のときに、 セクション・ヘッダを捨てやすくしてる – 末尾にあったらオフセットを計算しなおしたり、面 倒なことせずにすむ
32.
4.まとめ
33.
まとめ ●
ELF形式のファイルの内部構造を解析できるよ うになった ● 具体的には内部におけるそれぞれのヘッダを操 作できるようになった ● セグメント・ヘッダの取得はできるようになっ たので、それを元に内容をメモリ上に展開する プログラムを書くことになるのかな ● あ、あと書籍では論理回路について解説してい るページがあるけど、ここでは省く
Download now