Suche senden
Hochladen
SEH on mingw32
•
0 gefällt mir
•
2,183 views
K
kikairoya
Folgen
Boost #8 SEH on mingw32
Weniger lesen
Mehr lesen
Ingenieurwesen
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 37
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
egtra
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
Ryosuke839
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
effective modern c++ chapeter36
effective modern c++ chapeter36
Tatsuki SHIMIZU
Effective modern-c++#9
Effective modern-c++#9
Tatsuki SHIMIZU
Empfohlen
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
egtra
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
Ryosuke839
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
effective modern c++ chapeter36
effective modern c++ chapeter36
Tatsuki SHIMIZU
Effective modern-c++#9
Effective modern-c++#9
Tatsuki SHIMIZU
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
Mitsuru Kariya
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
Mitsuru Kariya
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
Altanative macro
Altanative macro
Motohiro KOSAKI
emc++ chapter32
emc++ chapter32
Tatsuki SHIMIZU
constexpr idioms
constexpr idioms
fimbul
Map
Map
kikairoya
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
Async design with Unity3D
Async design with Unity3D
Kouji Hosoda
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
llvm入門
llvm入門
MITSUNARI Shigeo
Javascript with Generative Art
Javascript with Generative Art
Shinsuke Matsuda
emcjp Item 42
emcjp Item 42
MITSUNARI Shigeo
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo
ゆるバグ
ゆるバグ
MITSUNARI Shigeo
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
MITSUNARI Shigeo
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
Windows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGW
Tsukasa Oi
Weitere ähnliche Inhalte
Was ist angesagt?
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
Mitsuru Kariya
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
Mitsuru Kariya
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
Altanative macro
Altanative macro
Motohiro KOSAKI
emc++ chapter32
emc++ chapter32
Tatsuki SHIMIZU
constexpr idioms
constexpr idioms
fimbul
Map
Map
kikairoya
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
Async design with Unity3D
Async design with Unity3D
Kouji Hosoda
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
llvm入門
llvm入門
MITSUNARI Shigeo
Javascript with Generative Art
Javascript with Generative Art
Shinsuke Matsuda
emcjp Item 42
emcjp Item 42
MITSUNARI Shigeo
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo
ゆるバグ
ゆるバグ
MITSUNARI Shigeo
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
MITSUNARI Shigeo
Was ist angesagt?
(20)
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Altanative macro
Altanative macro
emc++ chapter32
emc++ chapter32
constexpr idioms
constexpr idioms
Map
Map
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
Async design with Unity3D
Async design with Unity3D
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
llvm入門
llvm入門
Javascript with Generative Art
Javascript with Generative Art
emcjp Item 42
emcjp Item 42
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
ゆるバグ
ゆるバグ
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
Andere mochten auch
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
Windows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGW
Tsukasa Oi
C++ in Embedded Systems
C++ in Embedded Systems
kikairoya
Tr18015
Tr18015
kikairoya
マジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DD
マジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DD
エピック・ゲームズ・ジャパン Epic Games Japan
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
エピック・ゲームズ・ジャパン Epic Games Japan
大規模CSゲームにおけるライトマス運用
大規模CSゲームにおけるライトマス運用
エピック・ゲームズ・ジャパン Epic Games Japan
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
エピック・ゲームズ・ジャパン Epic Games Japan
Andere mochten auch
(8)
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
Windows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGW
C++ in Embedded Systems
C++ in Embedded Systems
Tr18015
Tr18015
マジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DD
マジシャンズデッド ポストモーテム ~マテリアル編~ (株式会社Byking: 鈴木孝司様、成相真治様) #UE4DD
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
大規模CSゲームにおけるライトマス運用
大規模CSゲームにおけるライトマス運用
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
Ähnlich wie SEH on mingw32
0x300
0x300
geek_alice
Objc lambda
Objc lambda
matuura_core
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
洋史 東平
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
洋史 東平
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
Taku Miyakawa
xv6から始めるSPIN入門
xv6から始めるSPIN入門
Ryousei Takano
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
Buffer overflow
Buffer overflow
ionis111
Lxc cf201207-presen
Lxc cf201207-presen
Kouhei Maeda
初めてのCPUを作ってみた
初めてのCPUを作ってみた
Eric Sartre
Ilerpg Study 004
Ilerpg Study 004
Yoshiki Ushida
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本
Kota Mizushima
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)
Kota Mizushima
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
Hirotaka Kawata
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
KamezawaHiroyuki
入門 シェル実装
入門 シェル実装
Yusuke Sangenya
Ähnlich wie SEH on mingw32
(20)
0x300
0x300
Objc lambda
Objc lambda
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
xv6から始めるSPIN入門
xv6から始めるSPIN入門
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
Buffer overflow
Buffer overflow
Lxc cf201207-presen
Lxc cf201207-presen
初めてのCPUを作ってみた
初めてのCPUを作ってみた
Ilerpg Study 004
Ilerpg Study 004
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
入門 シェル実装
入門 シェル実装
SEH on mingw32
1.
SEH on Mingw32
Boost.勉強会 #8 大阪 @kikairoya (Tomohiro Kashiwada)
2.
発表者について ● 名前:
@kikairoya ● 南九州から来ました ● もうすぐ大阪人になります ● 触手の下僕として働くことになりました ● C++ とか出来ます
3.
喋ること ● SEH(構造化例外)
とは ● SEH ライブラリ実装の解説
4.
喋ること ● SEH(構造化例外)
とは ● SEH ライブラリ実装の解説 ● Boostはいつも通り出てきません
5.
…その前に ● https://gist.github.com/1710310
を開いて おいてください。 ● スライドにコードを表示するのはちょっと無理があ りました
6.
SEH(構造化例外)とは ● Windowsシステムが使用する例外処理の方法
● 主にCPUのハードウェア例外を扱う ● ぬるぽとか ● divide by zero とか ● 一部システムAPIがソフトウェア例外を投げる ● HeapAllocとか ● UNIX クローンの非同期シグナルに相当
7.
SEHのシンタックス ● __except
を使う場合 __try { /* try block */ } __except (filter-expr) { /* except block */ } ● __finally を使う場合 __try { /* try block */ } __finally { /* finally block */ }
8.
SEHの処理手順 ● 関数呼び出しごとに例外ハンドラを登録
● 例外処理(ハンドラの呼び出し)は二段階 ● まずはスタックをどこまで巻き戻すか探索 __exceptのフィルタ式を呼び出して判定 ● 巻き戻し先が決まってから実際に巻き戻す finally blockをスタックの先端から順に実行
9.
例外ハンドラの登録 ● 関数呼び出しごとに例外ハンドラを登録
● 例外処理(ハンドラの呼び出し)は二段階 ● まずはスタックをどこまで巻き戻すか探索 __excpetのフィルタ式を呼び出して判定 ● 巻き戻し先が決まってから実際に巻き戻す finally blockをスタックの先端から順に実行
10.
例外ハンドラの登録 ● EXCEPTION_REGISTRATION構造体をスタッ
ク上に構築 ● prev メンバに[fs:0]の値をコピー ● [fs:0]に構造体のアドレスをコピー struct EXCEPTION_REGISTRATION { EXCEPTION_REGISTRATION *prev; PEXCEPTION_HANDLER handler; unsigned char user_data[VAR_LENGTH]; };
11.
スタックの構造 fn2のローカル変数 fn2のer.prev
fn2のer.handler fn1のフレームポインタ fn2からの戻りアドレス fn2の引数 fn1のローカル変数 fn1のer.prev fn1のer.handler fn0のフレームポインタ fn1からの戻りアドレス fn1の引数 esp [fs:0] ebp
12.
巻き戻し先の探索 ● 関数呼び出しごとに例外ハンドラを登録
● 例外処理(ハンドラの呼び出し)は二段階 ● まずはスタックをどこまで巻き戻すか探索 __exceptのフィルタ式を呼び出して判定 ● 巻き戻し先が決まってから実際に巻き戻す finally blockをスタックの先端から順に実行
13.
巻き戻し先の探索 例外発生 コンテキストを保存して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 探索終了 これ
14.
SEHの実現方法 ● 関数呼び出しごとに例外ハンドラを登録
● 例外処理(ハンドラの呼び出し)は二段階 ● まずはスタックをどこまで巻き戻すか探索 __exceptのフィルタ式を呼び出して判定 ● 巻き戻し先が決まってから実際に巻き戻す finally blockをスタックの先端から順に実行
15.
巻き戻し実行 ハンドラA ハンドラB
ハンドラC RtlUnwind call return 1 call return 1 call finally blockの実行 call return call return jmp finaly blockの実行 ハンドラCの続きexcept blockの実行 正常処理に復帰 jmp
16.
構造化例外のライブラリ実装 ● GCCでもSEH使いたい
● VC++と互換性のある構文を目指して → __try, __except, __finallyのキーワードを 魔クロで乗っ取る ● もちろんデストラクタも呼びたい → 黒魔術の山
17.
黒魔術っぽいところだけ解説 ● setjmp/longjmp
● filterの呼出し ● RtlUnwindの呼出し ● スタックの巻き戻し
18.
黒魔術っぽいところだけ解説 ● setjmp/longjmp
● filterの呼出し ● RtlUnwindの呼出し ● スタックの巻き戻し
19.
setjmp/longjmp ● setjmp/longjmpを使ってスタックを縦横無尽に駆
け回る ● msvcrtのsetjmp/longjmpは内部でSEHを使う ● __builtin_longjmpは1しか返せない → 自前実装
20.
黒魔術っぽいところだけ解説 ● setjmp/longjmp
● filterの呼出し ● RtlUnwindの呼出し ● スタックの巻き戻し
21.
filterの呼出し ● EXCEPTION_REGISTRATIONにfilterをwrapした
lambda-expressionを保存 ● lambda-exprがローカル変数をキャプチャしている ため、例外ハンドラから直接呼び出せる ● C++98で実現するにはsetjmp/longjmpでスタック を行き来する必要がある → コールスタックをどこまで壊すか予測不可能な ため非現実的
22.
黒魔術っぽいところだけ解説 ● setjmp/longjmp
● filterの呼出し ● RtlUnwindの呼出し ● スタックの巻き戻し
23.
RtlUnwindの呼出し void WINAPI
RtlUnwind( PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue ); ● TargetFrameに巻き戻し先の EXCEPTION_REGISTRATION を指定 ● TargetIpに巻き戻し完了後の復帰点を指定 ● 残りはnullptr
24.
RtlUnwindの呼出し ● ライブラリ関数のクセにcallee-saveレジスタを破
壊する曲者 ● 呼んだ後にesi/ediがクリアされている ● callで呼ばれる前提のクセに戻りアドレスを引数 で指定する必要がある ● GCCの拡張インラインアセンブラで破壊レジスタ を指定して対処
25.
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" );
26.
黒魔術っぽいところだけ解説 ● setjmp/longjmp
● filterの呼出し ● RtlUnwindの呼出し ● スタックの巻き戻し
27.
スタックの巻き戻し ● 実装のキモ
● finally blockの実行とデストラクタの呼出しを行 う必要がある ● __finallyだけなら__tryでsetjmp した地点に longjmp するだけ ● デストラクタを呼ぶにはC++例外を投げる必要 がある
28.
巻き戻し実行(/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
29.
スタックの巻き戻し(C++例外) ● ebpを操作して例外発生地点からthrowしたかの
ように振舞う ● 2段目以降のフレームでは、下位フレームの try block終了地点で例外が発生したかのように 振る舞う ● Leaf-functionのデストラクタを正しく呼び出すた めに-fnon-call-exceptionsが必須
30.
スタックの巻き戻し(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(); }
31.
巻き戻し実行(/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の続き
32.
巻き戻し実行 (/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
33.
スタックの巻き戻し(スタック破壊) ● C++例外で巻き戻している間も普通にスタックは
使われる ● 巻き戻すごとにスタックは短くなる(スタックの末 端にある領域は潰される) ● 例外ハンドラのコールスタックは例外発生場所よ り先端側にある ● つまり、スタック破壊が避けられない ● 巻き戻し中はコールスタックをヒープに一時退避
34.
制限事項 ● -fnon-call-exceptionsをつけないとleaf-function
上にあるオブジェクトのデストラクタが呼ばれない ● VC++の/EHaとは互換性が無い ● try blockに出入りするたびにsetjmp/longjmpをす るのでパフォーマンスペナルティがある ● 某ランドの特許に引っかかるかどうか不明
35.
まとめ ● Mingwで動くSEH構文をライブラリで実装した
● longjmp とかインラインアセンブリとか使ってるけ どC++です
36.
まとめ ● Mingwで動くSEH構文をライブラリで実装した
● longjmp とかインラインアセンブリとか使ってるけ どC++です ● C++は黒魔術のない素敵な言語です
37.
おしまい
Jetzt herunterladen