> +++ killed by SIGSEGV (core dumped) +++
> Ошибка сегментирования (сделан дамп памяти)
> Но код с такой же сутью на плюсах ее не дропает: Ты тут два вопроса задал. Про привилегии вопрос странный - обычному юзеру не положено ставить setreuid=0.
Про SIGSEGV - залёт по EPERM прислал тебе в ответку rax = -1.
Ты подправил только al и сделал следующий syscall к функции №18446744072635809596 из 32-разрядного ABI. О*евшее ядро послало тебя курить дамп.
"Код с такой же сутью на плюсах" не ленится заполнять все регистры, потому и не слетает.
А так даже вернёт код ошибки:
section .text
global _start
_start:
xor eax, eax
mov al, 0x71
xor ebx, ebx
xor ecx, ecx
xor esi, esi
xor edi, edi
syscall
xchg eax, edi
mov al, 0x3c
syscall
$ strace ./exit
execve("./exit", ["./exit"], [/* 53 vars */]) = 0
setreuid(0, 0) = -1 EPERM (Operation not permitted)
_exit(4294967295) = ?
+++ exited with 255 +++