我刚刚在网上查看了 Linux 系统调用号码,我发现无论是 32 位还是 64 位 Linux 版本,号码都不同。
为什么 Linux 要改变系统调用的顺序?这不会使 32 位和 64 位 Linux 程序之间的兼容性更难实现吗?
更多信息:
以下是我找到系统呼叫号码的网站:32 位 Linux,64 位 Linux。
我还在这两个文件中找到了 Linux 系统中的系统调用编号:
/usr/include/asm/unistd_32.h
和/usr/include/asm/unistd_64.h
。
编辑:我编写了一个32位汇编Hello World程序:
我使用命令编译了它nasm -f elf32 prog.asm && ld -m elf_i386 prog.o
,它可以正常编译和执行。然后我使用命令编译了同一个程序,nasm -f elf64 prog.asm && ld -m elf_x86_64 prog.o
以为它会崩溃,但它做了与第一个程序相同的事情,它在默认输出中写入了“Hello World!”。
64 位程序怎么可能使用与 32 位程序相同的系统调用(尽管这两种架构的系统调用表不同)。