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

301
Visualizações
¿Cómo se vincula el programa NASM a libc a través de ld?

Tengo un siguiente programa para NASM (ArchLinux i686)

 SECTION .data LC1: db "library call", 0 SECTION .text extern exit extern printf ;global main ;main: global _start _start: push LC1 call printf push 0 call exit

Que se ensambla con el comando:

 nasm -f elf libcall.asm

Si desea comentar dos líneas con _start y descomentar dos líneas con main , entonces ensamble y vincule con el comando:

 gcc libcall.o -o libcall

Entonces el programa funciona bien. Pero si para ensamblar el código con el punto de entrada _start y vincularlo con el comando:

 ld libcall.o -o libcall -lc

Luego, después de iniciar el programa en bash (mediante el comando ./libcall ), aparece el siguiente mensaje de error:

 bash: ./libcall: No such file or directory

Aunque el archivo libcall existe. objdump muestra lo siguiente:

 [al libcall ]$ objdump -d libcall libcall: file format elf32-i386 Disassembly of section .plt: 08048190 <printf@plt-0x10>: 8048190: ff 35 78 92 04 08 pushl 0x8049278 8048196: ff 25 7c 92 04 08 jmp *0x804927c 804819c: 00 00 add %al,(%eax) ... 080481a0 <printf@plt>: 80481a0: ff 25 80 92 04 08 jmp *0x8049280 80481a6: 68 00 00 00 00 push $0x0 80481ab: e9 e0 ff ff ff jmp 8048190 <printf@plt-0x10> 080481b0 <exit@plt>: 80481b0: ff 25 84 92 04 08 jmp *0x8049284 80481b6: 68 08 00 00 00 push $0x8 80481bb: e9 d0 ff ff ff jmp 8048190 <printf@plt-0x10> Disassembly of section .text: 080481c0 <_start>: 80481c0: 68 88 92 04 08 push $0x8049288 80481c5: e8 d6 ff ff ff call 80481a0 <printf@plt> 80481ca: 6a 00 push $0x0 80481cc: e8 df ff ff ff call 80481b0 <exit@plt>

¿Cómo se debe vincular correctamente el código ensamblador NASM con libc a través de ld ?

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

0

Hay algunas partes de libc/crt que vienen en archivos de objetos que también necesita vincular. Además, debe especificar algunas opciones, como el cargador dinámico (también conocido como intérprete) para usar (lo que probablemente sea el motivo de su problema). Simplemente use gcc para hacer lo correcto para usted. Si está interesado, puede ejecutar con gcc -v y luego verá la línea de comando horrible que usa para vincular. Usted ha sido advertido ;)

PD: debe usar el punto de entrada main que ha comentado.

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