我正在考虑将为Windows编写的脚本引擎移植到Linux。它用于Winamp的可视化平台AVS。我不确定目前是否有可能。据我所知,代码将采用C函数nseel_asm_atan
和nseel_asm_atan_end
的地址,并将它们存储在表中,以便在代码执行期间对其进行引用。
我看过MS的文档,但不确定__declspec(naked)
的作用是什么。文档中提到的序言和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) {}
最佳答案
基本上,函数序言为局部变量设置了一个堆栈框架,而尾语则负责清理它。通常,这是由编译器自动完成的。如果您使用__declspec(naked)
,则可以自行设置此堆栈框架,从而为您提供更大的灵活性。
有许多引用:here,here,also here等。
GNU gcc编译器还支持裸机,但显然不支持x86:search for "naked" in the page(我没有尝试查看它是否可以在x86上运行)
关于有人可以解释__declspec(naked)吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3021513/