SlideShare a Scribd company logo
はりぼて OS で ELF な
アプリを起動してみた
@uchan_nos
2016/11/26 第4回自作OSもくもく会
はりぼてOSによるアプリ起動
• デモ
はりぼてOSによるアプリ起動
• コンソールにコマンドを打ち込むと起動する
• 裏では:
• カーネルが.hrbファイルをメモリに配置
• アプリ用のデータ領域確保やESP設定
• エントリポイントにジャンプ
hrb ファイルフォーマット(p.460)
off 意味
0x00 stack+.data+heap の大きさ
0x04 “Hari”
0x08 mmarea の大きさ
0x0C ESPの初期値(= .data の転送先)
0x10 .data のサイズ
0x14 .data の初期値のファイル内オフセット
0x18 0xE9000000
0x1C エントリアドレス-0x20
0x20 heap 領域開始アドレス
ヘッダ
.text
.data
Segm 1
Segm 2
ロード後のメモリ配置
stack
.data
.bss
heap
.text
.data
ヘッダ
.hrbファイル
そのまま
ESP初期値
はりぼてOSのプログラムローダ(ELF化前)
console.c
実行可能形式いろいろ
• COM
• 実行時のメモリイメージそのままの形式
• PE
• Windowsの標準
• a.out
• Unix最初期の形式。TEXT, DATA, BSSだけをもつ
• COFF
• オブジェクトファイル形式として有名
• ELF
• Executable and Linking Format
ELF : Executable and Linking Format
• 現在の Unix, Linux での標準
• オブジェクトファイル、実行可能ファイルどちらもOK
• ツールチェーンで良くサポートされている
• a.out や COFF に比べ柔軟。新しい言語にも対応できる
• →これは ELF に対応するしかないでしょ!
ELF ファイルフォーマット
• ELFヘッダ、SHT 、PHT 、セクション群からなる
• SHT:セクション・ヘッダ・テーブル
• PHT:プログラム・ヘッダ・テーブル
• セクション群:.text, .data, .bss, .shstrtab など
• 詳しくは
『リンカ・ローダ実践開発テクニック』坂井弘亮, 2010
ELFヘッダ
PHT
SHT
セクション
ELF32ヘッダフォーマット
off field 意味
0x00 e_ident 先頭4バイトは 0x7f, ‘E’, ‘L’, ‘F’
0x10 e_type ファイルタイプ ET_EXEC, ET_REL など
0x12 e_machine EM_386 など
0x14 e_version ファイルバージョン
0x18 e_entry エントリポイントのアドレス
0x1C e_phoff プログラムヘッダテーブルのファイル位置
0x20 e_shoff セクションヘッダテーブルのファイル位置
0x24 e_flags 未使用
0x28 e_ehsize ELF ヘッダサイズ
0x2A …
0x32 e_shstrndx セクション名格納用セクションの番号
ELFヘッダ
PHT
SHT
セクション
セクション・ヘッダ
• .text、.data、.bss などのセクションを管理するヘッダ
• コンパイラが出力したセクションをリンカがまとめる
• セクション名
• セクションの属性(書き込み、実行)
• セクションのロード先仮想アドレス
• セクションデータのファイル位置とサイズ
プログラム・ヘッダ
• ローダが利用するセグメントを記述する
• PHTは実行可能ファイルにしかない
• セグメントのタイプ
• セグメントのロード先仮想アドレス
• セグメントデータのファイル位置とサイズ
• セグメントのメモリ上のサイズ
• セグメント属性(読み書き実行)
ロードの仕様を考える
• はりぼてOSでは、スタッ
ク領域は.dataの前に置く
• メモリ上では .text, .stack
の先頭アドレスが両方と
も 0 になって欲しい
• .stack, .bss, .malloc
はファイル上は0バイト
.text
.stack
.malloc
欲しい
ELFファイル
EXEC
RW
.text
.data
.bss
ELFヘッダ
PHT
SHT
欲しい
メモリ配置
.stack
.data
0番地
0番地
.bss
.malloc
ELF用リンカ
スクリプト
ENTRY(_HariMain)
INCLUDE ld_variables.lds
SECTIONS
{
. = SIZEOF_HEADERS;
.text : { *(.text) }
"file offset of data" = .;
. = 0;
.stack : AT("file offset of data") {
. = STACK;
}
.data : { *(.rodata*) *(.data) }
.bss : { *(.bss) }
.malloc : { . += MALLOC; }
}
EXECセグメントに
ロードされる部分
RWセグメントに
ロードされる部分
生成されるヘッダ構造
セクション タイプ ロード先 Offset Size
.text PROGBITS 00000094 000094 000188
.stack NOBITS 00000000 00021c 000400
.data PROGBITS 00000400 00021c 000088
.bss NOBITS 00000488 0002a4 000100
.malloc NOBITS 00000588 0002a4 00c000
セグメント Offset 仮想アドレス File Size Mem Size Flag
LOAD 000094 00000094 000188 000188 R E
LOAD 00021c 00000000 000000 000400 RW
LOAD 00021c 00000400 000088 00c188 RW
※これらは readelf -a hoge.elf で表示できるよ!
ローダの改造1
.elfファイルを探す console.c
ローダの改造2
ELFのマジックナンバーを確認する
…
ローダの改造3
espの初期値を計算する
calc_elf_esp
.stackセクションがあれば、そのサイズを返す
→.stackセクションが0番地から配置されることを暗に仮定している
ローダの改造4
.dataのコピーとアプリ起動
EXEC
0*8+4
RW
1*8+4
ELF
ファイル
全体
.data
.bss
.stack
p
q
appsiz
segsiz
.malloc
esp
calc_elf_datasize
copy_elf_data
ELFアプリ起動 デモ
リンカスクリプト豆知識
location counter
と
virtual memory address (VMA)
load memory address (LMA)
の関係
参考:https://sourceware.org/binutils/docs/ld/Output-Section-LMA.html
Location counter is . (dot)
SECTIONS
{
. = SIZEOF_HEADERS;
.text : { *(.text) }
"file offset of data" = .;
• VMA, LMA の現在値を保持するもの
• 値が加算されていくので「カウンタ」
• "file offset of data" はシンボル
Virtual memory address (VMA)
• VMAはそのセクションが配置されるメモリの仮想アドレス
• 上記の例では “.text” の VMA は SIZEOF_HEADERS
SECTIONS
{
. = SIZEOF_HEADERS;
.text : { *(.text) }
"file offset of data" = .;
SIZEOF_HEADERS
ファイルのヘッダの
バイト数を返す
リンカの組み込み変数
Virtual memory address (VMA)
ヘッダ
.text
SIZEOF_HEADERS
(= ELFヘッダ+PHT) バイト
"file offset of data"
.data
SHT
Load memory address (LMA)
• VMA はファイル実行時のアドレス
• 対して、LMA はファイルが読み込まれるアドレス
• 今回、これを「ファイル内のオフセット」として使っている
• 上記の例では “.stack” の VMA は 0、LMA は “.text” の直後
. = 0;
.stack : AT("file offset of data") {
. = STACK;
}
. = 0;
.stack : AT("file offset of data") {
. = STACK;
}
.data : { *(.rodata*) *(.data) }
.bss : { *(.bss) }
Sect VMA LMA
.stack 0 “file offset of data”
.data STACK “file offset of data”
.bss STACK+sizeof(.data) “file offset of data”+sizeof(.data)
ATを指定しなければ、LMAに関して直前のATの効果が続く
参考文献など
• ELF化したはりぼてOSのソースコード
https://github.com/osdev-jp/elf_haribote
• 『リンカ・ローダ実践開発テクニック』坂井 弘亮, 2010
• ELFの仕様書
http://www.skyfree.org/linux/references/ELF_Format.pdf
• LDのドキュメント
https://sourceware.org/binutils/docs/ld/
• 3.1 Basic Linker Script Concepts
• 3.6.8.2 Output Section LMA
• はりぼてOSサポートページ内 “tools/obj2bim”
http://hrb.osask.jp/wiki/?tools/obj2bim

More Related Content

What's hot

30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
uchan_nos
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdf
Yasunori Goto
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
Mr. Vengineer
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
uchan_nos
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
 
Ext4 filesystem(1)
Ext4 filesystem(1)Ext4 filesystem(1)
Ext4 filesystem(1)
Yoshihiro Yunomae
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
 
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Hiraku Toyooka
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
wata2ki
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
 
0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム
Minoru Nakamura
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
Nobuhiro Iwamatsu
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
Yuma Ohgami
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
 
UEFIベアメタルプログラミング
UEFIベアメタルプログラミングUEFIベアメタルプログラミング
UEFIベアメタルプログラミング
Yuma Ohgami
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
uchan_nos
 
YoctoでLTSディストリを作るには
YoctoでLTSディストリを作るにはYoctoでLTSディストリを作るには
YoctoでLTSディストリを作るには
wata2ki
 

What's hot (20)

30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdf
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
Ext4 filesystem(1)
Ext4 filesystem(1)Ext4 filesystem(1)
Ext4 filesystem(1)
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
UEFIベアメタルプログラミング
UEFIベアメタルプログラミングUEFIベアメタルプログラミング
UEFIベアメタルプログラミング
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
 
YoctoでLTSディストリを作るには
YoctoでLTSディストリを作るにはYoctoでLTSディストリを作るには
YoctoでLTSディストリを作るには
 

Viewers also liked

C++でできる!OS自作入門
C++でできる!OS自作入門C++でできる!OS自作入門
C++でできる!OS自作入門
uchan_nos
 
やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作り
Hidemi Kawai
 
Effective modern c++ 5
Effective modern c++ 5Effective modern c++ 5
Effective modern c++ 5
uchan_nos
 
ハッキング実演
ハッキング実演ハッキング実演
ハッキング実演
Ken Ogura
 
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
kikuchan98
 
CloudStack Overview(OSC2012Kansai@Kyoto)
CloudStack Overview(OSC2012Kansai@Kyoto)CloudStack Overview(OSC2012Kansai@Kyoto)
CloudStack Overview(OSC2012Kansai@Kyoto)Satoshi Shimazaki
 
オープンデータとLinked Open Data
オープンデータとLinked Open DataオープンデータとLinked Open Data
オープンデータとLinked Open Data
Fumihiro Kato
 
OpenStack + KVM + IPv6 = oname.com; Next Folsom/Grizzly Service development s...
OpenStack + KVM + IPv6 = oname.com; Next Folsom/Grizzly Service development s...OpenStack + KVM + IPv6 = oname.com; Next Folsom/Grizzly Service development s...
OpenStack + KVM + IPv6 = oname.com; Next Folsom/Grizzly Service development s...Naoto Gohko
 
CloudStack徹底入門読書会6章 CloudStack環境の設計
CloudStack徹底入門読書会6章 CloudStack環境の設計CloudStack徹底入門読書会6章 CloudStack環境の設計
CloudStack徹底入門読書会6章 CloudStack環境の設計
Kenichi Mineta
 
Hacking Ctrl-C
Hacking Ctrl-CHacking Ctrl-C
Hacking Ctrl-C
uchan_nos
 
Effective Modern C++ Item 9 and 10
Effective Modern C++ Item 9 and 10Effective Modern C++ Item 9 and 10
Effective Modern C++ Item 9 and 10
uchan_nos
 
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19Hiroya Nagao
 
OSC東京(2014年10月)
OSC東京(2014年10月)OSC東京(2014年10月)
OSC東京(2014年10月)
joeswebhosting
 
【事前資料:NG版】非オタの彼女が俺の持ってる監視ツールに興味津々なんだが…
【事前資料:NG版】非オタの彼女が俺の持ってる監視ツールに興味津々なんだが…【事前資料:NG版】非オタの彼女が俺の持ってる監視ツールに興味津々なんだが…
【事前資料:NG版】非オタの彼女が俺の持ってる監視ツールに興味津々なんだが…
Masahito Zembutsu
 
201306 cfc子どもと教育負担スライド
201306 cfc子どもと教育負担スライド201306 cfc子どもと教育負担スライド
201306 cfc子どもと教育負担スライドYusuke Nojima
 
Introduction to DHT with Chord
Introduction to DHT with ChordIntroduction to DHT with Chord
Introduction to DHT with ChordHiroya Nagao
 
Effective modern c++ 8
Effective modern c++ 8Effective modern c++ 8
Effective modern c++ 8
uchan_nos
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
 
コードレビューの文化を手探りで作っていった話
コードレビューの文化を手探りで作っていった話コードレビューの文化を手探りで作っていった話
コードレビューの文化を手探りで作っていった話
yasuhiro kiyota
 
C++11とゲーム製作
C++11とゲーム製作C++11とゲーム製作
C++11とゲーム製作
uchan_nos
 

Viewers also liked (20)

C++でできる!OS自作入門
C++でできる!OS自作入門C++でできる!OS自作入門
C++でできる!OS自作入門
 
やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作り
 
Effective modern c++ 5
Effective modern c++ 5Effective modern c++ 5
Effective modern c++ 5
 
ハッキング実演
ハッキング実演ハッキング実演
ハッキング実演
 
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
 
CloudStack Overview(OSC2012Kansai@Kyoto)
CloudStack Overview(OSC2012Kansai@Kyoto)CloudStack Overview(OSC2012Kansai@Kyoto)
CloudStack Overview(OSC2012Kansai@Kyoto)
 
オープンデータとLinked Open Data
オープンデータとLinked Open DataオープンデータとLinked Open Data
オープンデータとLinked Open Data
 
OpenStack + KVM + IPv6 = oname.com; Next Folsom/Grizzly Service development s...
OpenStack + KVM + IPv6 = oname.com; Next Folsom/Grizzly Service development s...OpenStack + KVM + IPv6 = oname.com; Next Folsom/Grizzly Service development s...
OpenStack + KVM + IPv6 = oname.com; Next Folsom/Grizzly Service development s...
 
CloudStack徹底入門読書会6章 CloudStack環境の設計
CloudStack徹底入門読書会6章 CloudStack環境の設計CloudStack徹底入門読書会6章 CloudStack環境の設計
CloudStack徹底入門読書会6章 CloudStack環境の設計
 
Hacking Ctrl-C
Hacking Ctrl-CHacking Ctrl-C
Hacking Ctrl-C
 
Effective Modern C++ Item 9 and 10
Effective Modern C++ Item 9 and 10Effective Modern C++ Item 9 and 10
Effective Modern C++ Item 9 and 10
 
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
 
OSC東京(2014年10月)
OSC東京(2014年10月)OSC東京(2014年10月)
OSC東京(2014年10月)
 
【事前資料:NG版】非オタの彼女が俺の持ってる監視ツールに興味津々なんだが…
【事前資料:NG版】非オタの彼女が俺の持ってる監視ツールに興味津々なんだが…【事前資料:NG版】非オタの彼女が俺の持ってる監視ツールに興味津々なんだが…
【事前資料:NG版】非オタの彼女が俺の持ってる監視ツールに興味津々なんだが…
 
201306 cfc子どもと教育負担スライド
201306 cfc子どもと教育負担スライド201306 cfc子どもと教育負担スライド
201306 cfc子どもと教育負担スライド
 
Introduction to DHT with Chord
Introduction to DHT with ChordIntroduction to DHT with Chord
Introduction to DHT with Chord
 
Effective modern c++ 8
Effective modern c++ 8Effective modern c++ 8
Effective modern c++ 8
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
コードレビューの文化を手探りで作っていった話
コードレビューの文化を手探りで作っていった話コードレビューの文化を手探りで作っていった話
コードレビューの文化を手探りで作っていった話
 
C++11とゲーム製作
C++11とゲーム製作C++11とゲーム製作
C++11とゲーム製作
 

Similar to はりぼて OS で ELF なアプリを起動してみた

【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門
sandai
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
ionis111
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
sandai
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
inaz2
 
Cephのベンチマークをしました
CephのベンチマークをしましたCephのベンチマークをしました
Cephのベンチマークをしました
OSSラボ株式会社
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
Etsuji Nakai
 
as-2. メモリと CPU
as-2. メモリと CPUas-2. メモリと CPU
as-2. メモリと CPU
kunihikokaneko1
 
An annotated context-free grammar based vulnerability detection using LALR pa...
An annotated context-free grammar based vulnerability detection using LALR pa...An annotated context-free grammar based vulnerability detection using LALR pa...
An annotated context-free grammar based vulnerability detection using LALR pa...
Ruo Ando
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3moai kids
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache maruyama097
 
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
Akira Ouchi
 
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会Yoshihisa Ozaki
 
SolidFire を Kibana(ELK Stack)で可視化(需要予測)する
SolidFire を Kibana(ELK Stack)で可視化(需要予測)するSolidFire を Kibana(ELK Stack)で可視化(需要予測)する
SolidFire を Kibana(ELK Stack)で可視化(需要予測)する
Kensuke Maeda
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
fukuoka.ex
 
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきかElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
Amazon Web Services Japan
 
【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門 【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門
sandai
 
オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用Ruo Ando
 
Mosesdecoderコード解読の勘所
Mosesdecoderコード解読の勘所Mosesdecoderコード解読の勘所
Mosesdecoderコード解読の勘所
Jun-ya Norimatsu
 
Hadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionHadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionCloudera, Inc.
 

Similar to はりぼて OS で ELF なアプリを起動してみた (20)

【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
Cephのベンチマークをしました
CephのベンチマークをしましたCephのベンチマークをしました
Cephのベンチマークをしました
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
 
as-2. メモリと CPU
as-2. メモリと CPUas-2. メモリと CPU
as-2. メモリと CPU
 
An annotated context-free grammar based vulnerability detection using LALR pa...
An annotated context-free grammar based vulnerability detection using LALR pa...An annotated context-free grammar based vulnerability detection using LALR pa...
An annotated context-free grammar based vulnerability detection using LALR pa...
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
 
Cpu cache arch
Cpu cache archCpu cache arch
Cpu cache arch
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache 
 
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
Raspberry Piの便利なインストーラーNOOBSを活用してみよう!
 
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
 
SolidFire を Kibana(ELK Stack)で可視化(需要予測)する
SolidFire を Kibana(ELK Stack)で可視化(需要予測)するSolidFire を Kibana(ELK Stack)で可視化(需要予測)する
SolidFire を Kibana(ELK Stack)で可視化(需要予測)する
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
 
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきかElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
 
【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門 【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門
 
オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用
 
Mosesdecoderコード解読の勘所
Mosesdecoderコード解読の勘所Mosesdecoderコード解読の勘所
Mosesdecoderコード解読の勘所
 
Hadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionHadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese Version
 

More from uchan_nos

MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続する
uchan_nos
 
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事
uchan_nos
 
小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器
uchan_nos
 
トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路
uchan_nos
 
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトOpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
uchan_nos
 
自作言語でお絵描き
自作言語でお絵描き自作言語でお絵描き
自作言語でお絵描き
uchan_nos
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
uchan_nos
 
サイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るサイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返る
uchan_nos
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programming
uchan_nos
 
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSLangsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
uchan_nos
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
uchan_nos
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
uchan_nos
 
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG
uchan_nos
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
uchan_nos
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OS
uchan_nos
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019
uchan_nos
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019
uchan_nos
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
uchan_nos
 
Timers
TimersTimers
Timers
uchan_nos
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structure
uchan_nos
 

More from uchan_nos (20)

MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続する
 
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事
 
小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器
 
トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路
 
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトOpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
 
自作言語でお絵描き
自作言語でお絵描き自作言語でお絵描き
自作言語でお絵描き
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
 
サイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るサイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返る
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programming
 
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSLangsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
 
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OS
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
 
Timers
TimersTimers
Timers
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structure
 

はりぼて OS で ELF なアプリを起動してみた