SlideShare uma empresa Scribd logo
1 de 30
はりぼて 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

Mais conteúdo relacionado

Mais procurados

30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2uchan_nos
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介Yuma Ohgami
 
Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る wata2ki
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動uchan_nos
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenMITSUNARI Shigeo
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク7shi
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編Fixstars Corporation
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化Takuya ASADA
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいwata2ki
 
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミングUnity Technologies Japan K.K.
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎信之 岩永
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Hiro H.
 

Mais procurados (20)

30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
 
Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る 
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
 

Destaque

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++ 5uchan_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 DataFumihiro 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-Cuchan_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 10uchan_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++ 8uchan_nos
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくばHirotaka Kawata
 
コードレビューの文化を手探りで作っていった話
コードレビューの文化を手探りで作っていった話コードレビューの文化を手探りで作っていった話
コードレビューの文化を手探りで作っていった話yasuhiro kiyota
 
C++11とゲーム製作
C++11とゲーム製作C++11とゲーム製作
C++11とゲーム製作uchan_nos
 

Destaque (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とゲーム製作
 

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

【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門sandai
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflowionis111
 
【学習メモ#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 EngineEtsuji Nakai
 
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
 

Semelhante a はりぼて 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
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
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コード解読の勘所
 

Mais de 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
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道uchan_nos
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programminguchan_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 LPSuchan_nos
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作uchan_nos
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装uchan_nos
 
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPGuchan_nos
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osuchan_nos
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OSuchan_nos
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019uchan_nos
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019uchan_nos
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structureuchan_nos
 

Mais de 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年を振り返る
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
 
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
 
Timers
TimersTimers
Timers
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structure
 

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