私は別のスタックでC関数を呼び出す方法を探しています。つまり、現在のスタックポインタを保存し、スタックポインタを別の場所に設定し、古いスタックポインタが戻ったときにそれを復元します。異なるスタックポインタ(gcc)を使ってC関数を呼び出す
これは、プログラミング言語用の軽量なスレッドシステムです。スレッドは非常に小さなスタックで動作し、スタックがいつ必要になるかチェックし、動的にサイズを変更します。これは、たくさんのメモリを浪費することなく、何千ものスレッドを割り当てることができるようにするためです。 Cコードを呼び出すときは、小さなコードスタックを使用するのは安全ではありません。なぜなら、Cコードはチェックとサイズ変更を知らないので、C言語用の軽量スレッド間で共有される大きなpthreadスタックを使用したいのです。同じpthread)。
これで、うまく動作するアセンブリコードスタブを書くことができましたが、gcc拡張や既に実装されているライブラリなど、これを行うためのより良い方法があるかどうかは疑問でした。もしそうでなければ、私は頭をABIやアセンブリ言語のマニュアルに埋もれさせるでしょう;-)私はこれを怠惰から頼りにして、輪を再構築したくはありません。
クローンのシステムコールを使用して、個別のスタックで独自の「スレッド」を実装できます。 libcラッパーの代わりにダイレクトシステムコールを使用すると、どのリソースと名前空間が共有されているかを指定できる点を除けばforkのように動作します。 – technosaurus