SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
SEH on Mingw32 
Boost.勉強会 #8 大阪 
@kikairoya (Tomohiro Kashiwada)
発表者について 
● 名前: @kikairoya 
● 南九州から来ました 
● もうすぐ大阪人になります 
● 触手の下僕として働くことになりました 
● C++ とか出来ます
喋ること 
● SEH(構造化例外) とは 
● SEH ライブラリ実装の解説
喋ること 
● SEH(構造化例外) とは 
● SEH ライブラリ実装の解説 
● Boostはいつも通り出てきません
…その前に 
● https://gist.github.com/1710310 を開いて 
おいてください。 
● スライドにコードを表示するのはちょっと無理があ 
りました
SEH(構造化例外)とは 
● Windowsシステムが使用する例外処理の方法 
● 主にCPUのハードウェア例外を扱う 
● ぬるぽとか 
● divide by zero とか 
● 一部システムAPIがソフトウェア例外を投げる 
● HeapAllocとか 
● UNIX クローンの非同期シグナルに相当
SEHのシンタックス 
● __except を使う場合 
__try { 
/* try block */ 
} __except (filter-expr) { 
/* except block */ 
} 
● __finally を使う場合 
__try { 
/* try block */ 
} __finally { 
/* finally block */ 
}
SEHの処理手順 
● 関数呼び出しごとに例外ハンドラを登録 
● 例外処理(ハンドラの呼び出し)は二段階 
● まずはスタックをどこまで巻き戻すか探索 
__exceptのフィルタ式を呼び出して判定 
● 巻き戻し先が決まってから実際に巻き戻す 
finally blockをスタックの先端から順に実行
例外ハンドラの登録 
● 関数呼び出しごとに例外ハンドラを登録 
● 例外処理(ハンドラの呼び出し)は二段階 
● まずはスタックをどこまで巻き戻すか探索 
__excpetのフィルタ式を呼び出して判定 
● 巻き戻し先が決まってから実際に巻き戻す 
finally blockをスタックの先端から順に実行
例外ハンドラの登録 
● EXCEPTION_REGISTRATION構造体をスタッ 
ク上に構築 
● prev メンバに[fs:0]の値をコピー 
● [fs:0]に構造体のアドレスをコピー 
struct EXCEPTION_REGISTRATION { 
EXCEPTION_REGISTRATION *prev; 
PEXCEPTION_HANDLER handler; 
unsigned char user_data[VAR_LENGTH]; 
};
スタックの構造 
fn2のローカル変数 
fn2のer.prev 
fn2のer.handler 
fn1のフレームポインタ 
fn2からの戻りアドレス 
fn2の引数 
fn1のローカル変数 
fn1のer.prev 
fn1のer.handler 
fn0のフレームポインタ 
fn1からの戻りアドレス 
fn1の引数 
esp 
[fs:0] 
ebp
巻き戻し先の探索 
● 関数呼び出しごとに例外ハンドラを登録 
● 例外処理(ハンドラの呼び出し)は二段階 
● まずはスタックをどこまで巻き戻すか探索 
__exceptのフィルタ式を呼び出して判定 
● 巻き戻し先が決まってから実際に巻き戻す 
finally blockをスタックの先端から順に実行
巻き戻し先の探索 
例外発生 
コンテキストを保存してjmp 
kernel呼出し 
ハンドラ探索 
} __except (filter-expr) { 
ハンドラA 
ハンドラB 
ハンドラC 
call 
call 
return 1 
call 
return 1 
call 
filterA 
filterB 
filterC 
call 
return 0 
call 
return 0 
call 
return 1 
探索終了 
これ
SEHの実現方法 
● 関数呼び出しごとに例外ハンドラを登録 
● 例外処理(ハンドラの呼び出し)は二段階 
● まずはスタックをどこまで巻き戻すか探索 
__exceptのフィルタ式を呼び出して判定 
● 巻き戻し先が決まってから実際に巻き戻す 
finally blockをスタックの先端から順に実行
巻き戻し実行 
ハンドラA 
ハンドラB 
ハンドラC 
RtlUnwind 
call 
return 1 
call 
return 1 
call 
finally blockの実行 
call 
return 
call 
return 
jmp 
finaly blockの実行 
ハンドラCの続きexcept blockの実行 
正常処理に復帰 
jmp
構造化例外のライブラリ実装 
● GCCでもSEH使いたい 
● VC++と互換性のある構文を目指して 
→ __try, __except, __finallyのキーワードを 
魔クロで乗っ取る 
● もちろんデストラクタも呼びたい 
→ 黒魔術の山
黒魔術っぽいところだけ解説 
● setjmp/longjmp 
● filterの呼出し 
● RtlUnwindの呼出し 
● スタックの巻き戻し
黒魔術っぽいところだけ解説 
● setjmp/longjmp 
● filterの呼出し 
● RtlUnwindの呼出し 
● スタックの巻き戻し
setjmp/longjmp 
● setjmp/longjmpを使ってスタックを縦横無尽に駆 
け回る 
● msvcrtのsetjmp/longjmpは内部でSEHを使う 
● __builtin_longjmpは1しか返せない 
→ 自前実装
黒魔術っぽいところだけ解説 
● setjmp/longjmp 
● filterの呼出し 
● RtlUnwindの呼出し 
● スタックの巻き戻し
filterの呼出し 
● EXCEPTION_REGISTRATIONにfilterをwrapした 
lambda-expressionを保存 
● lambda-exprがローカル変数をキャプチャしている 
ため、例外ハンドラから直接呼び出せる 
● C++98で実現するにはsetjmp/longjmpでスタック 
を行き来する必要がある 
→ コールスタックをどこまで壊すか予測不可能な 
ため非現実的
黒魔術っぽいところだけ解説 
● setjmp/longjmp 
● filterの呼出し 
● RtlUnwindの呼出し 
● スタックの巻き戻し
RtlUnwindの呼出し 
void WINAPI RtlUnwind( 
PVOID TargetFrame, 
PVOID TargetIp, 
PEXCEPTION_RECORD ExceptionRecord, 
PVOID ReturnValue 
); 
● TargetFrameに巻き戻し先の 
EXCEPTION_REGISTRATION を指定 
● TargetIpに巻き戻し完了後の復帰点を指定 
● 残りはnullptr
RtlUnwindの呼出し 
● ライブラリ関数のクセにcallee-saveレジスタを破 
壊する曲者 
● 呼んだ後にesi/ediがクリアされている 
● callで呼ばれる前提のクセに戻りアドレスを引数 
で指定する必要がある 
● GCCの拡張インラインアセンブラで破壊レジスタ 
を指定して対処
RtlUnwindの呼出し 
asm volatile ( 
"pushl $0nt" // ReturnValue 
"pushl $0nt" // ExceptionRecord 
"pushl $1fnt" // TargetIp 
"pushl %0nt" // TargetFrame 
"call _RtlUnwind@16nt" 
"1: nopnt" 
: 
: "a"(reg) 
: "ecx", "edx", "ebx", "esi", "edi", 
"esp", "cc", "memory" 
);
黒魔術っぽいところだけ解説 
● setjmp/longjmp 
● filterの呼出し 
● RtlUnwindの呼出し 
● スタックの巻き戻し
スタックの巻き戻し 
● 実装のキモ 
● finally blockの実行とデストラクタの呼出しを行 
う必要がある 
● __finallyだけなら__tryでsetjmp した地点に 
longjmp するだけ 
● デストラクタを呼ぶにはC++例外を投げる必要 
がある
巻き戻し実行(/EHsc相当) 
ハンドラA 
ハンドラB 
ハンドラC 
RtlUnwind 
call 
return 1 
call 
return 1 
call 
finally blockの実行 
call 
return 
call 
return 
jmp 
finaly blockの実行 
ハンドラCの続きexcept blockの実行 
正常処理に復帰 
jmp
スタックの巻き戻し(C++例外) 
● ebpを操作して例外発生地点からthrowしたかの 
ように振舞う 
● 2段目以降のフレームでは、下位フレームの 
try block終了地点で例外が発生したかのように 
振る舞う 
● Leaf-functionのデストラクタを正しく呼び出すた 
めに-fnon-call-exceptionsが必須
スタックの巻き戻し(throw) 
void throw_seh_unwinder(const seh_jmp_buf &b) { 
asm volatile ( 
"movl %0, %%ebpnt" // フレームポインタを切り替え 
"pushl %1nt" // 戻りアドレスの偽装 
"jmp _throw_seh_unwinder" // call 
: 
: "r"(b.ebp), "a"(b.eip), 
"b"(b.ebx), "S"(b.esi), "D"(b.edi) 
: "memory"); 
__builtin_unreachable(); 
} 
extern "C" void throw_seh_unwinder() { 
// 例外発生地点から呼ばれているように見える 
throw seh_unwinder(); 
}
巻き戻し実行(/EHa相当) 
ハンドラA 
ハンドラB 
ハンドラC 
RtlUnwind 
call 
return 1 
call 
return 1 
call 
例外発生地点から例外を投 
げてtry blockでcatch 
jmp 
jmp 
jmp 
jmp 
jmp 
直前のtry blockから例外を 
投げてtry blockでcatch 
直前のtry blockから例外を 
投げてtry blockでcatch 
正常処理に復帰 
jmp 
ハンドラCの続き
巻き戻し実行 (/EHa相当) 
3段目のハンドラ: 
*1からthrow して*2でcatch 
そのままfinally block を実行 
*3からハンドラにlongjmp 
2段目のハンドラ: 
*3からthrow して*4でcatch 
そのままfinally block を実行 
*5からハンドラにlongjmp 
1段目のハンドラ: 
*5からthrow して*6でcatch 
そのままexcept block を実行 
*7から正常ルートに復帰 
__try { 
__try { 
__try { 
// *1 Access Violation 
*(int *)0 = 0; 
} __finally { 
// *2 
} // *3 
} __finally { 
// *4 
} // *5 
} __except(1) { 
// *6 
} // *7 
throw 
throw 
throw 
longjmp 
longjmp
スタックの巻き戻し(スタック破壊) 
● C++例外で巻き戻している間も普通にスタックは 
使われる 
● 巻き戻すごとにスタックは短くなる(スタックの末 
端にある領域は潰される) 
● 例外ハンドラのコールスタックは例外発生場所よ 
り先端側にある 
● つまり、スタック破壊が避けられない 
● 巻き戻し中はコールスタックをヒープに一時退避
制限事項 
● -fnon-call-exceptionsをつけないとleaf-function 
上にあるオブジェクトのデストラクタが呼ばれない 
● VC++の/EHaとは互換性が無い 
● try blockに出入りするたびにsetjmp/longjmpをす 
るのでパフォーマンスペナルティがある 
● 某ランドの特許に引っかかるかどうか不明
まとめ 
● Mingwで動くSEH構文をライブラリで実装した 
● longjmp とかインラインアセンブリとか使ってるけ 
どC++です
まとめ 
● Mingwで動くSEH構文をライブラリで実装した 
● longjmp とかインラインアセンブリとか使ってるけ 
どC++です 
● C++は黒魔術のない素敵な言語です
おしまい

Weitere ähnliche Inhalte

Was ist angesagt?

Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Mitsuru Kariya
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Keisuke Fukuda
 
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Mitsuru Kariya
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idiomsfimbul
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介MITSUNARI Shigeo
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3DKouji Hosoda
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
Javascript with Generative Art
Javascript with Generative ArtJavascript with Generative Art
Javascript with Generative ArtShinsuke Matsuda
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenMITSUNARI Shigeo
 
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿MITSUNARI Shigeo
 

Was ist angesagt? (20)

Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
 
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
Altanative macro
Altanative macroAltanative macro
Altanative macro
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idioms
 
Map
MapMap
Map
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3D
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
llvm入門
llvm入門llvm入門
llvm入門
 
Javascript with Generative Art
Javascript with Generative ArtJavascript with Generative Art
Javascript with Generative Art
 
emcjp Item 42
emcjp Item 42emcjp Item 42
emcjp Item 42
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
ゆるバグ
ゆるバグゆるバグ
ゆるバグ
 
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
 

Andere mochten auch

カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてalwei
 
Windows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGWWindows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGWTsukasa Oi
 
C++ in Embedded Systems
C++ in Embedded SystemsC++ in Embedded Systems
C++ in Embedded Systemskikairoya
 
マジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DD
マジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DDマジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DD
マジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DDエピック・ゲームズ・ジャパン Epic Games Japan
 
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介エピック・ゲームズ・ジャパン Epic Games Japan
 
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DDマテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DDエピック・ゲームズ・ジャパン Epic Games Japan
 

Andere mochten auch (8)

カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
 
Windows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGWWindows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGW
 
C++ in Embedded Systems
C++ in Embedded SystemsC++ in Embedded Systems
C++ in Embedded Systems
 
Tr18015
Tr18015Tr18015
Tr18015
 
マジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DD
マジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DDマジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DD
マジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DD
 
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
 
大規模CSゲームにおけるライトマス運用
大規模CSゲームにおけるライトマス運用大規模CSゲームにおけるライトマス運用
大規模CSゲームにおけるライトマス運用
 
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DDマテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
 

Ähnlich wie SEH on mingw32

君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らないdigitalghost
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)洋史 東平
 
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)洋史 東平
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
xv6から始めるSPIN入門
xv6から始めるSPIN入門xv6から始めるSPIN入門
xv6から始めるSPIN入門Ryousei Takano
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflowionis111
 
Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presenKouhei Maeda
 
初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみたEric Sartre
 
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Kota Mizushima
 
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Kota Mizushima
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会Hirotaka Kawata
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会Koichi Sakata
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料KamezawaHiroyuki
 

Ähnlich wie SEH on mingw32 (20)

0x300
0x3000x300
0x300
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
 
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
xv6から始めるSPIN入門
xv6から始めるSPIN入門xv6から始めるSPIN入門
xv6から始めるSPIN入門
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
 
Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presen
 
初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみた
 
Ilerpg Study 004
Ilerpg Study 004Ilerpg Study 004
Ilerpg Study 004
 
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本
 
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 

SEH on mingw32