13

Windows用に作成されたスクリプトエンジンをLinuxに移植することを検討しています。Winampの視覚化プラットフォームAVS用です。現時点でそれが可能かどうかはわかりません。私が知る限り、コードはC関数のアドレスを取得し、コードの実行中に参照できるテーブル内にそれらを格納していますnseel_asm_atannseel_asm_atan_end

MSのドキュメントを見てきましたが、実際に何が行われているのかわかり__declspec(naked)ません。ドキュメントに記載されているプロローグおよびエピローグコードとは何ですか?これはWindowsの呼び出し規約に関連していますか?これは持ち運び可能ですか?同様の手法を使用したLinuxベースの例を知っていますか?

static double (*__atan)(double) = &atan;
__declspec ( naked ) void nseel_asm_atan(void)
{
  FUNC1_ENTER

  *__nextBlock = __atan(*parm_a);

  FUNC_LEAVE
}
__declspec ( naked ) void nseel_asm_atan_end(void) {}
4

2 に答える 2

11

基本的に、関数プロローグはローカル変数のスタック フレームをセットアップし、エピローグはそれをクリーンアップします。これは通常、コンパイラによって自動的に行われます。を使用する場合__declspec(naked)、このスタック フレームの設定はユーザー次第であるため、柔軟性が向上します。

多くの参照があります:ここここまた ここ など。

GNU gcc コンパイラもネイキッドをサポートしていますが、明らかに x86 には対応していません:ページ内で「ネイキッド」を検索してください (x86 で動作するかどうかは試していません)。

于 2010-06-12T11:49:35.790 に答える