は、あなたがそのようないくつかのハッシュ塩、または多分対称型または非対称キーとして、あなたのアプリケーションのためのいくつかのセキュリティトークンを生成する関数を持っていると言うことができます。実行時にconstexpr関数が決して呼び出されないようにする方法は?
ここでは、C++でconstexprとしてこの関数を使用し、ビルド番号、タイムスタンプなど何らかの情報に基づいてビルド用のキーを生成するとします。
あなたは勤勉プログラマであることを確認して、それが唯一のコンパイル時に呼ばれています確保するための適切な方法でこれを呼び出すので、死んだストリッパーは、最終的な実行可能ファイルからコードを削除します。
しかし、あなたが他の誰かが危険な方法でそれを呼び出すするつもりはない、またはそれは多分、コンパイラが関数を取り除くしませんし、お使いのセキュリティトークンアルゴリズムは、公開になることを確認することはできません知識があれば、攻撃者は将来のトークンを推測することがより簡単になります。
あるいは、セキュリティはさておき、の機能の実行に時間がかかるし、あなたは必ずそれが実行時に起こることがないようにしたいとエンドユーザーのための悪いユーザーエクスペリエンスを起こしましょう。
constexprの関数は、実行時に呼び出されることは決してできないことを確実にする任意の方法はありますか?あるいは、実行時にアサートなどを投げてもOKですが、コンパイルエラーと同じように理想的ではありません。
存在しない例外タイプをスローする方法がいくつかあると聞いています。そのため、constexpr関数がデッドストリップされていないと、リンカーエラーが発生しますが、いくつかのコンパイラで。
遠縁の質問:Force constexpr to be evaluated at compile time
可能な解決策の1つ:可能な解決策の1つは、テンプレート<...> struct xyz {static constexpr long long value = ...; } '。いいえ、実際には、私は 'constexpr関数 'を使わずに厳密に構造体テンプレートに計算を実装することを意味します。 –
あなたのアルゴリズムが壊れていると分かっていれば、あなたのアルゴリズムは駄目だということは一般的には同意しています。 – immibis
これは、この質問に遭遇し、試してみたい人のための良い一般的なコメントですが、私の必要性はセキュリティ関連ではありません。 –