ABI指应用二进制接口,规定了二进制程序两个模块之间或者二进制程序与操作系统之间的接口,这里主要关注调用规范call convention。不同的体系结构、操作系统、编程语言、每种编程语言的不同编译器实现基本都有自己规定或者遵循的ABI和调用规范。另外,也可通过FFI规范实现跨编程语言的过程调用,比如Python/Java/Go等提供了C的FFI,这样通过C实现互相调用。
Linux在x86_64和i386下的ABI:
这里就不详细解释不同的ABI和调用规范了,可以通过简单的C/C++程序和内核代码分别验证用户态和系统调用的规范。另外,对于类似Go语言有自己的一套函数调用规范的,也可以通过生成的汇编去验证。