GNU/Linux >> Tutoriales Linux >  >> Linux

Compilando ensamblador de 32 bits en ubuntu de 64 bits

Primer cambio _printf a printf y el _start símbolo a main , luego usa gcc para vincular el archivo objeto, que lo vinculará automáticamente a libc , tienes que hacer eso porque AFAIK no puedes enlazar a libc sin un main . También debe usar elf32 no elf64 al ensamblar porque el código tiene instrucciones de 32 bits:

bits 32
extern printf
global main

section .data
    message db "Hello world!!", 10, 0

section .text

main:
    pushad 
    push dword message
    call printf 
    add esp, 4 
    popad 
    ret

Y construye con:

nasm -f elf32 vaja4.asm
gcc -m32 vaja4.o -o vaja4
$./test 
$Hello world!!

Editar:

Dado que ahora está compilando código de 32 bits en un sistema de 64 bits, deberá instalar la versión de 32 bits de las bibliotecas

apt-get install ia32-libs 

En Ubuntu 12.10, primero debe instalar los paquetes de desarrollo

sudo apt-get update
sudo apt-get install libc6-dev-i386

para

gcc -m32 vaja4.o -o vaja4

para trabajar.


Dudo que el error que ves se deba a un problema de 32/64 bits. El error que ves es decir

vaja4.asm:(.text+0x7): undefined reference to `_printf'

le dice claramente que el símbolo _printf no está definido, lo que significa que la biblioteca para la función printf no está vinculada.

su paso de vinculación, es decir

ld vaja4.o -o vaja4

no incluye bibliotecas. Debe vincular su programa con una biblioteca que pueda proporcionar la definición de la función printf. Creo que debería elegir la biblioteca por sí mismo sin molestarlo con estos mensajes, pero debido a que no puede encontrar una biblioteca C adecuada para esta función, supongo que no tiene las bibliotecas requeridas, es decir, falta una biblioteca de 32 o 64 bits. /P>

De todos modos, intente la siguiente secuencia de comandos para ensamblar y vincular su programa:

nasm -f elf vaja4.asm
ld -m elf_i386 vaja4.o vaja4
./vaja4

Linux
  1. ¿Cómo instalar Libncurses.so.5 en Ubuntu 20.04?

  2. ¿La instalación de Chrome falló en Ubuntu 12.04?

  3. ¿Cómo puedo instalar Mongodb en Ubuntu de 32 bits?

  4. Cómo actualizar Ubuntu 20.04 a Ubuntu 21.04

  5. ¿Puedo ejecutar ubuntu de 64 bits en mi PC (>10 años)?

Instalar Nginx en Ubuntu 18.04

Instalar Redis en Ubuntu

Cambiar zona horaria en Ubuntu 18.04

Instalar Jenkins en Ubuntu 18.04

Instalar Elasticsearch en Ubuntu 18.04

Instalar MongoDB en Ubuntu 18.04