【发布时间】:2011-03-02 13:55:24
【问题描述】:
我正在考虑将一个为 Windows 编写的脚本引擎移植到 Linux;它用于 Winamp 的可视化平台 AVS。我不确定目前是否有可能。据我所知,代码获取了 C 函数 nseel_asm_atan 和 nseel_asm_atan_end 的地址,并将它们存储在一个表中,它可以在代码执行期间引用。
我查看了 MS 的文档,但我不确定 __declspec(naked) 的真正作用。文档中提到的 prolog 和 epilog 代码是什么?这与 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) {}
【问题讨论】:
-
这就是prolog 和epilog 的意思:msdn.microsoft.com/en-us/library/tawsa7cb(VS.80).aspx,我很确定你可以只用
#define __declspec(n)来扩展Linux 的任何内容。我认为 GNU C++ 实现了一些类似的东西,但我不太确定它是什么。
标签: c linux windows assembly calling-convention