我正在寻找在x86上用于内核模块调用的ABI的官方定义.我最近查看了一个已编译的模块,并惊讶地发现:
>它使用寄存器传递前三个参数(eax,edx和
ECX).
>它不像GCC docs中描述的那样快速调用. docs say那个
fastcall使用ecx和edx(微软风格).
我能找到的唯一相关信息是this,但它并没有说太多.
所以:
1)是否有关于内核模块中使用的ABI的官方文档(不是系统调用ABI,而不仅仅是函数列表 – 我找到的那些).
2)编译器如何产生这种奇怪的快速调用?我错过了一个开关吗?
解决方法:
-mregparm = 3对此负责.