我一直在阅读关于汇编调用约定的内容,到目前为止我了解到:
x86(userland) x86(kernel) x64(userland) x64(kernel)
1st arg Stack EBX RDI RDI
2nd arg Stack ECX RSI RSI
3rd arg Stack EDX RDX RDX
4th arg Stack ESI RCX R10
5th arg Stack EDI R8 R8
6th arg Stack EBP R9 R9
result EAX EAX RAX RAX
我的问题是:
目前我学到的内容是否正确?
如何在x86(内核)和x64(两者)中传递超过6个参数?使用栈吗?能否给我展示一个小例子?
我有一个内核模块,想从ASM中调用该模块中的函数。应该使用哪种约定?内核还是用户空间?
syscall
接口中使用。对于内核内部函数之间的调用,使用标准ABI(标记为“x64(userland)”)。然而,我不是这方面的专家,所以如果我有错误,请有经验的人纠正我。 - Michael Burr