3

我正在寻找用于 x86 内核模块调用的 ABI 的官方定义。我最近查看了一个已编译的模块,并惊讶地发现:

  • 它使用寄存器来传递前三个参数(eaxedxecx

  • fastcall与 GCC 文档中的描述不同。文档说使用 ecxfastcall和 edx (微软风格)。

我能找到的唯一一些相关的信息是这个,但它并没有说太多。

所以:

1)是否有任何关于内核模块中使用的 ABI 的官方文档(不是系统调用 ABI,而不仅仅是函数列表 - 我确实找到了)。

2)编译器是如何产生这个奇怪的快速调用的?有没有我错过的开关?

4

1 回答 1

7

-mregparm=3对此负责。

于 2012-08-07T13:57:44.503 回答