为什么 Linux 64 位系统调用表不同

为什么 Linux 64 位系统调用表不同

我刚刚在网上查看了 Linux 系统调用号码,我发现无论是 32 位还是 64 位 Linux 版本,号码都不同。

为什么 Linux 要改变系统调用的顺序?这不会使 32 位和 64 位 Linux 程序之间的兼容性更难实现吗?

更多信息:

  • 以下是我找到系统呼叫号码的网站:32 位 Linux64 位 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 位程序相同的系统调用(尽管这两种架构的系统调用表不同)。

相关内容