我有用32位汇编语言编写的程序…现在,我无法在64位OS上对其进行编译。在我们学校,它们是特定的,程序必须以32位版本编写。这是我的程序:
bits 32 extern _printf global _start section .data message db "Hello world!!", 10, 0 section .text _start: pushad push dword message call _printf add esp, 4 popad ret
任何的想法?我尝试了很多方法来编译它。编译后输出错误:
nasm -f elf64 vaja4.asm ld vaja4.o -o vaja4 ./vaja4
输出:
vaja4.o: In function `_start': vaja4.asm:(.text+0x7): undefined reference to `_printf'
首先将更_printf改为printf并将_start符号更改为main,然后使用gcc链接目标文件,该文件将自动链接至该文件libc, 您需要这样做,因为AFAIK如果没有,就无法链接至libcmain。另外,在汇编时也应使用elf32而不是elf64,因为代码具有32位指令:
_printf
printf
_start
main
gcc
libc
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
并使用:
nasm -f elf32 vaja4.asm gcc -m32 vaja4.o -o vaja4 $./test $Hello world!!
编辑:
由于您现在要在64位系统上编译32位代码,因此需要安装32位版本的库
apt-get install ia32-libs