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).
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…