我正在大会上为学习目的写一个简单的基于图形的程序; 为此,我打算使用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上的链接器.