Intel SGX - Enclave内におけるC++標準関数の使用可否リスト
以前参考文献[1]のページに載っていた、Enclave内におけるC++標準関数の使用可否リストを手元に残しておいたものをそのまま掲載します。
ただし、[1]の消滅直前の時点で元情報が不完全なように見受けられたので、情報の抜けが頻発している状況です。非対応クラスの明示が特にない限り、「SGXSDKに含まれているか」の項目がYesならフル対応、Noなら非対応、部分的ならば明示はされていないが非対応クラスあり、であるようです。
[2]によれば、Enclave内で利用できるC++ライブラリのベースはC++03に準じているようです。
ユーティリティライブラリ
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| cstdlib |
部分的 |
|
| csignal |
No |
|
| csetjmp |
No |
|
| cstdarg |
Yes |
|
| typeinfo |
部分的 |
|
| typeindex |
Yes |
|
| type_traits |
Yes |
|
| bitset |
Yes |
|
| functional |
Yes |
|
| utility |
Yes |
|
| ctime |
部分的 |
|
| chrono |
No |
|
| cstddef |
Yes |
|
| initializer_list |
Yes |
|
| tuple |
Yes |
|
動的メモリ管理
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| memory |
Yes |
|
| new |
部分的 |
(備考: 配列のヒープ的確保では少なくとも正常に動作) |
| scoped_allocator |
Yes |
|
数値リミット
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| cfloat |
Yes |
|
| cinttypes |
部分的 |
|
| climits |
Yes |
|
| cstdint |
部分的 |
|
| limits |
Yes |
|
エラーハンドラ
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| cassert |
Yes |
|
| cerrno |
Yes |
|
| exception |
部分的 |
nested_exception |
| stdexcept |
Yes |
|
| system_error |
Yes |
|
文字列ライブラリ
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| cctype |
部分的 |
|
| cstring |
部分的 |
|
| cuchar |
No |
|
| cwchar |
部分的 |
|
| cwctype |
部分的 |
|
| string |
Yes |
|
STLコンテナ
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| array |
Yes |
|
| dequeue |
Yes |
|
| forward_list |
Yes |
|
| list |
Yes |
|
| map |
Yes |
|
| queue |
Yes |
|
| set |
Yes |
|
| stack |
Yes |
|
| unordered_map |
Yes |
|
| unordered_set |
Yes |
|
| vector |
Yes |
|
アルゴリズム
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| algorithm |
部分的 |
|
イテレータ
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| iterator |
Yes |
|
数値ライブラリ
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| cfenv |
No |
|
| cmath |
部分的 |
|
| complex |
Yes |
|
| numeric |
Yes |
|
| random |
No |
|
| ratio |
Yes |
|
| valarray |
Yes |
|
入出力
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| cstdio |
部分的 |
|
| fstream |
No |
|
| iomanip |
No |
|
| ios |
No |
|
| iosfwd |
No |
|
| iostream |
No |
|
| istream |
No |
|
| ostream |
No |
|
| sstream |
No |
|
| streambuf |
No |
|
| strstream |
No |
|
ローカライザ
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| clocale |
No |
|
| codecvt |
No |
|
| locale |
No |
|
正規表現
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| regex |
No |
|
不可分操作
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| atomic |
Yes |
|
スレッド
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| condition_variable |
部分的 |
|
| future |
No |
|
| mutex |
部分的 |
timed_mutex, recursive_timed_mutex
|
| thread |
No |
|
標準C互換化ヘッダ
| ヘッダ名 |
SGXSDKに含まれるか |
非対応クラス |
| ccomplex |
Yes |
|
| ciso646 |
Yes |
備考: 形骸化したヘッダ(ヘッダファイル内に定義なし) |
| cstdalign |
Yes |
|
| cstdbool |
Yes |
|
| ctgmath |
Yes |
|
参考
[1] Intel® Software Guard Extensions SDK - Unsupported C++ Standard Functions (リンク無効)
[2] Using random library within enclave - Intel Developer Zone