Linux系统调用汇编实现细节、特殊返回值规则及ABI相关权威文档查询
作为经常和系统调用、底层ABIs打交道的开发者,我整理了几个能解决你需求的优质资源,帮你搞清楚这些细粒度的实现规则:
Linux汇编层面系统调用的细粒度参考
- 架构专属的系统调用规范文档:比如针对x86_64平台,有社区和官方整理的详细规范,明确说明系统调用的寄存器使用规则(
rax存系统调用号,rdi/rsi/rdx/r10/r8/r9依次传递参数,返回值存在rax中),以及错误处理逻辑——这里纠正你对mmap的误解:底层系统调用出错时,返回的是负的错误码(比如-ENOMEM),而libc的mmap包装函数会把这个值转换成MAP_FAILED(即(void*)-1),并将errno设置为对应的正数,并不是NULL - errno_code。 - 《x86 Assembly Language Programming with Linux》书籍:这本书有专门章节手把手教你用汇编调用Linux系统调用,覆盖了参数传递、返回值解析、特殊系统调用(比如mmap、clone)的细节,非常适合入门底层调用。
- man手册的NOTES section:很多系统调用的man页(比如
man 2 mmap)在NOTES部分会明确区分底层系统调用和libc包装函数的行为差异,包括返回值、错误处理的细节,这是最容易获取的官方细节来源。
Windows ABI的权威资源
- 微软官方《x64 Software Conventions》文档:这是Windows x64平台ABI的官方权威指南,详细说明了用户态函数调用约定、寄存器使用、栈布局,以及系统服务(Windows对系统调用的称呼)的调用机制、参数传递规则。
- 《Windows Internals》系列书籍:虽然偏向内核原理,但里面有大量关于Windows系统服务调用流程、ABI细节的实战讲解,比官方文档更通俗易懂,能帮你理解系统调用的底层逻辑。
- 微软《Calling Conventions》官方文档:针对x86和x64平台分别讲解了不同的调用约定,包括用户态到内核态的系统服务调用规则,是入门Windows ABI的必备参考。
内容的提问来源于stack exchange,提问作者Daniil Zuev
相关产品推荐
相关产品推荐

