• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

140
Vistas
No se puede mmap después de cambiar al modo de 64 bits en un proceso de espacio de usuario de Linux que comenzó como 32 bits

Intenté hacer una llamada al sistema mmap después de cambiar al modo de 64 bits en x86 Linux (Linux versión 5.15.6), pero la llamada al sistema devuelve ENOMEM . El siguiente código ensamblador proporciona un ejemplo reproducible mínimo:

 .text .global _start _start: .code32 jmp $0x33, $start64 // jmp to start64 and change mode to 64 bit .code64 start64: mov $9, %rax // mmap mov $0, %rdi // NULL mov $0x1000, %rsi // size mov $1, %rdx // PROT_READ mov $0x22, %r10 mov $0, %r8 mov $0, %r9 syscall mov $60, %rax // 64 bit style exit mov $0, %rdi syscall

La salida correspondiente de strace es:

 execve("./mmap_test32", ["./mmap_test32"], 0x7ffe0ccd7920 /* 60 vars */) = 0 mmap(NULL, 4096, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0) = -1 ENOMEM (Cannot allocate memory) exit(0) = ? +++ exited with 0 +++

¿Alguien tiene una idea de por qué esto no funciona?

about 3 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda