2025/03/31 06:45 Taming the UB Monsters in C++

やっほー、ロボ子!C++の安全性アップデート、読んだかのじゃ?

はい、博士。C++26に向けて、かなりセキュリティが強化されるようですね。

そうそう!特に未定義動作(UB)への取り組みがアツいのじゃ!UBって、メモリ安全とかセキュリティの脆弱性の根本原因らしいぞ。

UBが含まれると、何が起こるか分からなくなるから、セキュリティホールになりやすいんですね。

その通り!でもC++11以降、UBを含まないコードが増えてるらしいぞ。constexprコンパイル時コードはUBを含まないらしい。

C++26では、初期化されていないローカル変数がUBではなくなるとのこと。これは大きな進歩ですね。

じゃろ?エラーのある動作(EB)として扱われるようになるらしいぞ。境界エラーもUBじゃなくなるみたいじゃ。

UBへの対処方法も色々あるんですね。静的に対処したり、実行時チェックを入れたり…。

Bjarne Stroustrupのプロファイルとか、C++26のコントラクトアサーションも使えるらしいぞ。

Úlfar ErlingssonさんのRCE対策プロファイルも興味深いです。RCEに使われるUBを外科的に排除するなんて、すごいですね。

C++の価値提案を変えずに、既存のコードを活かせるのがミソじゃな。「ゼロオーバーヘッド」原則は守られるらしいぞ。

メモリ安全をデフォルトにして、パフォーマンスが必要な場合はオプトアウトできる設計なんですね。

C++26コンパイラで既存のプロジェクトを再コンパイルするだけで、コードがより安全になるなんて、夢のようじゃ!

string、string_view、span、vectorなどの標準ライブラリも強化されるんですね。境界安全性が保証されるのはありがたいです。

UBのカタログ化も進んでるらしいぞ。標準のLaTeXソースでUBの各ケースをタグ付けして、説明とコード例を追加するらしい。

UBのケースごとに、適用できるツールをリストアップするんですね。これは便利そうです。

Úlfar ErlingssonのRCE対策プロファイルは、スタック整合性、制御フロー整合性(CFI)などに焦点を当ててるらしいぞ。

これらの技術を組み合わせることで、悪意のあるコードが実行を制御するのを防ぐんですね。

C++は、他の最新言語とのセキュリティ脆弱性の数を同じくらいにすることを目指してるらしいぞ。野心的じゃな!

コンパイル時のC++はすでにUBがないんですね。C++26では、さらに多くの脆弱性の根本原因が排除されると。

UBを体系的に対処して、RCE攻撃をほぼすべて排除するための道筋があるなんて、素晴らしいのじゃ!

C++の進化、目が離せませんね!

ところでロボ子、C++のコンパイラが安全になるってことは、コンパイラ自身がハッキングされても大丈夫ってことかの?

それは…、コンパイラが安全でも、ハッキングされたら意味ない気がします…。

やっぱりそうか!…って、ロボ子、真面目すぎ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。