Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

708
Visualizações
Linux x64: ¿por qué r10 viene antes que r8 y r9 en syscalls?

Decidí probar el ensamblado el otro día, y he estado jugando con cosas realmente básicas como imprimir cosas desde argv hasta stdout. Encontré esta gran lista de números de llamada al sistema de Linux con argumentos y todo, y tengo curiosidad por qué r10 se usa para argumentos antes de r8 y r9 . He encontrado todo tipo de convenciones extrañas sobre qué se puede usar, qué, para qué y cuándo, como cómo van los contadores de bucle en rcx . ¿Hay alguna razón en particular por la que se subió r10 ? ¿Era más conveniente?

Probablemente también debería mencionar que estoy interesado en esto por curiosidad, no porque me esté causando problemas.

Editar: encontré esta pregunta que se acerca, haciendo referencia a la documentación de ABI x64 en la página 124, donde señala que las aplicaciones de nivel de usuario usan rdi, rsi, rdx, rcx, r8, r9 . El núcleo, por otro lado, usa r10 en lugar de rcx y destruye rcx y r11 . Eso podría explicar cómo r10 terminó allí, pero ¿por qué se intercambió?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

RCX , junto con R11 , es utilizado por la instrucción syscall , siendo inmediatamente destruido por ella. Por lo tanto, estos registros no solo no se guardan después de la llamada al sistema, sino que ni siquiera se pueden usar para pasar parámetros. Por lo tanto, se eligió R10 para reemplazar RCX inutilizable para pasar el cuarto parámetro.

Consulte también esta respuesta para obtener un poco más de información sobre cómo syscall usa estos registros.

Referencia: Referencia del conjunto de instrucciones de Intel , busque SYSCALL .

over 4 years ago · Santiago Trujillo Relatório

0

consulte la documentación de x86-64.orgs abi en la page 124

  1. Las aplicaciones de nivel de usuario se utilizan como registros enteros para pasar la secuencia %rdi, %rsi, %rdx, %rcx, %r8 y %r9. La interfaz del núcleo utiliza %rdi, %rsi, %rdx, %r10, %r8 y %r9.

  2. Una llamada al sistema se realiza a través de la instrucción syscall. El núcleo destruye los registros %rcx y %r11.

Esto significa que cuando usa la instrucción syscall, el núcleo destruye %rcx , por lo que necesita usar %r10 en su lugar.


Además, el comentario de @technosaurus explica que el kernel está usando %rcx para almacenar el punto de entrada en caso de una interrupción durante una llamada al sistema.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda