从Linux上的汇编代码调用SDL / OpenGL
我正在大会上为学习目的写一个简单的基于图形的程序;为此,我打算使用OpenGL或SDL.我试图从汇编中调用OpenGL / SDL的功能.
问题是,与我在互联网上发现的许多汇编和OpenGL / SDL教程不同,我机器中的OpenGL / SDL显然不使用C调用约定.我在C中编写了一个简单的程序,将其编译为程序集(使用-S开关),显然GCC生成的汇编代码通过在寄存器中传递参数而不是被推送到堆栈来调用OpenGL / SDL函数. 现在,问题是,如何确定如何将参数传递给这些OpenGL / SDL函数?也就是说,我如何确定哪个参数对应哪个寄存器? 显然,由于GCC可以编译C代码来调用OpenGL / SDL,因此必须有办法找出函数参数和寄存器之间的对应关系.在C调用约定中,规则很简单,向后推送参数并在eax / rax中返回值,我可以简单地阅读他们的C文档,我可以很容易地弄清楚如何传递参数.但这些怎么样? 有没有办法使用C调用约定调用OpenGL / SDL? 顺便说一下,我正在使用yasm,gcc / ld作为Gentoo Linux amd64上的链接器. 解决方法
在x86-64 linux系统上,函数调用遵循标准的x86-64 ABI约定.简而言之:
>前六个整数/指针参数按顺序在rdi,rsi,rdx,rcx,r8,r9中传递.>前八个浮点参数在xmm0-xmm7中作为标量传递.>其余不适合的参数按C顺序推送到堆栈中.根据需要填充堆栈以使rsp与16个字节保持对齐. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |