Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

710
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!