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

181
Visualizações
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 Respostas
Responde à pergunta

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 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