关于如何在x86上进行与网络相关的系统调用我是reading an article,我看到这些调用是通过单个系统调用" socketcall"多路复用的。这种额外层次结构的原因似乎是节省系统呼叫号码。
快速浏览一下x64,情况似乎并非如此。为什么会这样? x86处理器中的每个寄存器都是32位长,并且不应该存储更大的系统调用值;那么socketcall没有在x64上实现的原因是什么?
答案 0 :(得分:0)
纯粹的猜测,但在一些具有少量寄存器的架构上,如x86,超出一定数量参数的函数无法有效地将所有参数直接传递到寄存器中(对于x86,这大约是6)。例如,sendto和recvfrom取6 + 1作为系统调用号。此时,将指针传递给long数组会更有效,而对于参数小于阈值的其他指针,我猜测这是一个方便和相关函数之间代码共享的问题。