Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

180
Vistas
Problemas para obtener argumentos de línea de comandos en el ensamblado x86

Estoy tratando de escribir una versión x86 del programa 'cat' como un entrenamiento de llamadas syscall en ensamblaje.

Estoy luchando mucho con los argumentos de la línea de comandos. Uso el símbolo principal como punto de entrada, así que pensé que encontraría el parámetro argc en %rdi y el parámetro argv en %rsi. En realidad, argc está en %rdi como se esperaba, pero sigo fallando en el segmento cuando intento pasar argv[1] a la llamada al sistema abierta.

No estoy seguro de lo que estoy haciendo mal, aquí está mi código de ensamblaje:

 main: cmp $2, %rdi // If argc != 2 return 1 jne .err1 lea 8(%rsi), %rdi // Move argv[1] -> %rdi xor %rsi, %rsi // 0 to %rsi -> O_RDONLY xor %rdx, %rdx mov $2, %rax // Open = syscall 2 syscall cmp 0, %rax // If open returns <0 -> exit status 2 jl .err2 mov %rax, %rdi // Move fd to %rdi call cat ret .err1: mov $1, %rax ret .err2: mov $2, %rax ret
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Hay dos problemas con su código.

Primero, usa lea 8(%rsi), %rdi para recuperar el segundo argumento. Tenga en cuenta que rsi apunta a una matriz de punteros a los argumentos de la línea de comandos, por lo que para recuperar el puntero al segundo argumento, debe quitar la referencia a 8(%rsi) usando algo como mov 8(%rsi), %rdi .

En segundo lugar, olvidó el signo de dólar delante del 0 en cmp $0, %rax . Esto hace que se seleccione un modo de dirección absoluta para la dirección 0 , eliminando efectivamente la referencia a un puntero nulo. Para solucionar esto, agregue el signo de dólar que falta para seleccionar un modo de direccionamiento inmediato.

Cuando soluciono ambos problemas, su código, en la medida en que lo publicó, parece funcionar bien.

over 4 years ago · Santiago Trujillo Denunciar
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 Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda