我正在考虑将为Windows编写的脚本引擎移植到Linux。它用于Winamp的可视化平台AVS。我不确定目前是否有可能。据我所知,代码将采用C函数nseel_asm_atannseel_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),则可以自行设置此堆栈框架,从而为您提供更大的灵活性。

有许多引用:hereherealso here等。

GNU gcc编译器还支持裸机,但显然不支持x86:search for "naked" in the page(我没有尝试查看它是否可以在x86上运行)

关于有人可以解释__declspec(naked)吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3021513/

10-11 16:49