32位nasm程序集无法在64位系统上启动

时间:2012-05-23 09:22:13

标签: 32bit-64bit nasm ld

我编写了一个32位的汇编文件,我想在64位Linux系统上编译它(并让它工作)。我已安装gcc-multiliblib32-glibc

我尝试使用以下命令创建二进制文件:

nasm -f elf test.asm
ld -melf_i386 -o test -e _main test.o /usr/lib32/libc.so.6 

其中_main是入口点。创建了文件测试,我将其调整为:

chmod ugo+x ./test

但是,我无法打开它。我明白了:

bash: ./test: No such file or directory

我确定文件存在,因为我可以在vim中打开它(我可以在第一行看到ELF)。这是怎么回事?

2 个答案:

答案 0 :(得分:0)

该消息与动态链接器有关,因为使用动态库需要更多的努力。简单的方法是链接到静态C库(/usr/lib32/libc.a)。但是,如果你只是打电话给你的入口点" main"并将其链接为普通的C程序(gcc -m32 -o test test.o),它也可以工作。

答案 1 :(得分:-1)

编译器中没有问题。

实际上你输错了命令。

1)编译32位程序命令是:nasm -f elf32 test.asm

    and for 64 bit asm or assembly language file command is : nasm -f elf64 test.asm

2)编译后,您需要链接该命令的文件:

     ld -o test test.o  ( for both the 64/32 bit program)

3)现在你将能够使用以下命令执行程序:

      ./test