Why does syscall compile in NASM 32 bit output whi

2020-02-15 04:18发布

The Intel manual says that:

  • the syscall instruction is invalid for compatibility mode (32-bit)
  • popa is invalid for 64-bit mode

So is there a reason why NASM:

  • gives a compilation error instruction not supported in 64-bit mode if I use popa with -f elf64
  • does not give give a compilation error if I use syscall with -f elf32. If I run the executable I get Illegal instruction (core dumped) as expected.

Why treat those two cases differently?

Tested with NASM version 2.10.09 on Ubuntu 14.04 (should be OS agnostic).

1条回答
【Aperson】
2楼-- · 2020-02-15 04:58

Because the syscall instruction exists (and works) on AMD processors in 32 bit mode too. Historically, Intel used the sysenter instruction, but when AMD came up with the 64 bit extension, they used their own syscall and so when Intel took over the extensions, they also started supporting syscall, but only in 64 bit mode.

查看更多
登录 后发表回答