написал небольшой кодик асм:
Assembler Code:
  1. section .text
  2. global _start
  3. _start:
  4. xor eax, eax
  5. mov al, 0x71
  6. xor ebx, ebx
  7. xor ecx, ecx
  8. xor esi, esi
  9. xor edi, edi
  10. syscall
  11. mov al, 0x3c
  12. syscall

который дропает ошибку:

$sudo nasm -static -f elf64 exit.asm && sudo ld exit.o -o exit && sudo ./exit; strace ./exit
[sudo] пароль для belmondo:
execve("./exit", ["./exit"], [/* 61 vars */]) = 0
setreuid(0, 0) = -1 EPERM (Operation not permitted)
strace: [ Process PID=7703 runs in x32 mode. ]
syscall_18446744072635809596(0, 0, 0, 0, 0, 0) = -1 (errno 38)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xffffffffffffffda} ---
+++ killed by SIGSEGV (core dumped) +++
Ошибка сегментирования (сделан дамп памяти)

Но код с такой же сутью на плюсах ее не дропает:
C++ Code:
  1. #include <unistd.h>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. int main() {
  6.     cout << setreuid(0,0) << endl;
  7.     return 0;
  8. }


$ g++ -o check check.cpp && sudo ./check
0

В чем может быть проблема?