我正在编写一个简单的基于图形的程序,以汇编语言为学习目的;为此,我打算使用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,在Gentoo Linux amd64上使用gcc / ld作为链接器。
问题是,与我在互联网上找到的许多汇编和OpenGL/SDL教程不同,我的机器上的OpenGL/SDL显然没有使用C调用约定。我用C编写了一个简单的程序,将其编译为汇编(使用-S开关),显然由GCC生成的汇编代码通过在寄存器中传递参数而不是被推入堆栈来调用OpenGL/SDL函数。
现在,问题是,如何确定如何传递参数给这些OpenGL/SDL函数?也就是说,我该如何找出哪个参数对应哪个寄存器?
显然,由于GCC可以将C代码编译为调用OpenGL/SDL的代码,因此必须有一种方法来确定函数参数和寄存器之间的对应关系。在C调用约定中,规则很简单,向后推参数并在eax/rax中返回值,我只需阅读它们的C文档,就可以轻松地确定如何传递参数。但是这些如何处理呢?
是否有一种方法可以使用C调用约定调用OpenGL/SDL?
顺便说一下,我正在使用yasm,在Gentoo Linux amd64上使用gcc / ld作为链接器。