我正在寻找用于 x86 内核模块调用的 ABI 的官方定义。我最近查看了一个已编译的模块,并惊讶地发现:
它使用寄存器来传递前三个参数(
eax
和edx
)ecx
。它
fastcall
与 GCC 文档中的描述不同。文档说使用 ecxfastcall
和 edx (微软风格)。
我能找到的唯一一些相关的信息是这个,但它并没有说太多。
所以:
1)是否有任何关于内核模块中使用的 ABI 的官方文档(不是系统调用 ABI,而不仅仅是函数列表 - 我确实找到了)。
2)编译器是如何产生这个奇怪的快速调用的?有没有我错过的开关?