GNU/Linux >> Belajar Linux >  >> Linux

Mengkompilasi Assembler 32 bit di ubuntu 64 bit

Ubah dulu _printf ke printf dan _start simbol ke main , lalu gunakan gcc untuk menautkan file objek, yang secara otomatis akan menautkannya ke libc , Anda perlu melakukannya karena AFAIK Anda tidak dapat menautkan ke libc tanpa main . Anda juga harus menggunakan elf32 bukan elf64 saat merakit karena kode tersebut memiliki instruksi 32 bit :

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

Dan bangun dengan:

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

Edit:

Karena sekarang Anda mengompilasi kode 32-bit pada sistem 64-bit, Anda perlu menginstal versi 32-bit dari pustaka

apt-get install ia32-libs 

Di Ubuntu 12.10, Anda perlu menginstal paket pengembangan terlebih dahulu

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

untuk

gcc -m32 vaja4.o -o vaja4

untuk bekerja.


Saya ragu kesalahan yang Anda lihat adalah karena masalah 32/64 bit. Kesalahan yang Anda lihat yaitu

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

dengan jelas memberi tahu Anda bahwa simbol _printf tidak terdefinisi yang berarti pustaka untuk fungsi printf tidak ditautkan.

langkah penautan Anda yaitu

ld vaja4.o -o vaja4

tidak termasuk perpustakaan apa pun. Anda perlu menautkan program Anda dengan perpustakaan yang dapat memberikan definisi fungsi printf. Saya percaya ld harus memilih perpustakaan itu sendiri tanpa mengganggu Anda dengan pesan-pesan ini tetapi karena tidak dapat menemukan perpustakaan C yang cocok untuk fungsi ini, saya rasa Anda tidak memiliki perpustakaan yang diperlukan yaitu perpustakaan 32 bit atau 64 tidak ada.

Pokoknya, silakan coba urutan perintah berikut untuk merakit dan menautkan program Anda:

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

Linux
  1. Bagaimana Cara Menginstal Libncurses.so.5 Di Ubuntu 20.04?

  2. Cara Meningkatkan Ubuntu 20.04 ke Ubuntu 21.04

  3. Bisakah saya menjalankan ubuntu 64 bit di pc saya (> 10 tahun)

  1. rTorrent – ​​baris perintah klien Bit Torrent di Ubuntu Linux

  2. Instal Chrome Gagal Di Ubuntu 12.04?

  3. Bagaimana Saya Dapat Menginstal Mongodb Di Ubuntu 32 Bit ??

  1. Perintah Bash printf

  2. Cara menginstal Angular di Ubuntu 20.04 LTS

  3. Mengkompilasi Program Qt pertama Anda di Ubuntu