昨年の 32C3で、鉄道システムのセキュリティに関する考慮事項に関する講演を見たところです。25分で、スピーカーはエイダについて簡単に話します。具体的には次のように述べています。
典型的な Ada の実装には、「(tramp/trunk/?) 行」と呼ばれるメカニズムがあります。つまり、スタック上でコードを実行することになり、C プログラムにはあまり適していません。[...] Ada コードを C ライブラリにリンクする場合、セキュリティ メカニズムの 1 つが機能しません。
トークの各部分へのリンク (YouTube) を次に示します。これは背景のスライドです。ご覧のとおり、私は単語の 1 つについて確信が持てません。もしかしてトランポリン?
ここで私の率直な質問: この声明には真実がありますか? そうだとすれば、Ada 言語のこの不思議な機能と、それが明らかに影響を与えているセキュリティ メカニズムについて詳しく説明できる人はいますか?
これまで、コードはコード セグメント(別名「テキスト」) に存在し、データ (スタックを含む) は別のメモリ位置にあるデータ セグメントに配置されると常に想定していました (この図に示されているように)。そして、Ada のメモリ管理について読むと、そこではそれほど変わらないはずです。
このようなレイアウトを回避する方法はありますが (たとえば、この「C on stack」の質問とこの「C on heap 」の回答を参照してください)、スタックが明示的に実行可能にされない限り、最近の OS は通常、実行可能スペースの保護によってそのような試みを防ぐと思います。- ただし、組み込みシステムの場合、コードが ROM に保存されていない場合は、依然として問題になる可能性があります (誰か明確にできますか?)。