私はエクスプロイトがどのように動作するかについて読んでいます。スタックのリターンアドレスを上書きして動作するようです。これをもっと難しくするために(スタック型カナリアス、ASLR、DEPなど)多くの努力が払われてきましたが、ハードウェア製作者にとってレジスタを追加する方が簡単で、返却アドレスを保持することになります。この方法では、リターンアドレスは定義によってバッファオーバーフローによって上書きされませんでした。コールとレットはまだ存在し、今日のCPUと同じように動作します(唯一の違いはリターンアドレスを格納する場所です)、互換性に関する問題はあまりないように見えます。アドレスにアクセスするためにRAMの代わりにレジスタを使用しているので、パフォーマンスの影響はおそらくプラスになります(ただし重要ではありません)。別のレジスタを使用してリターンアドレスを格納していますか?
インテルは、2つの余分なレジスタを必要とするにもかかわらず、MPXが実装されているため、セキュリティ目的でさらに多くのレジスタを割り当てる余裕があるようです。だから、なぜ彼らは復帰アドレスを格納する特別なレジスタを追加しないのですか?
これはまったく不愉快なアイデアではありません。私はどこかで読んでいます(残念ながら、私はどこを覚えていませんか)。部屋の象は、任意にネストされた関数呼び出しを許可するスタック構造が必要であるということです。別のコール/スタックスタック(これは以前私が指摘していたアイデアです)はより強固に見えます。互換性の問題は避けられませんが、関数呼び出し中にスタックがどのように満たされているかに依存するツールもありますが、私たちは(さらに別の)移行期間を設けることができると信じています。 –
ネストされたコールをどのように解決しましたか? (メモリに値を格納することを除いて、コードによって任意に操作することができます) – Ped7g
オンチップリターンアドレスを持つことのパフォーマンス上の利点は、[リターンアドレスキャッシュ](https://priorart.ip。 com/IPCOM/000108056)を使用して、RET命令の結果を予測する。 –