在Linux 64位机器上运行x86汇编代码

时间:2015-06-01 13:39:34

标签: linux assembly x86

我正在尝试使用薄荷64位在计算机上运行一些汇编代码。 因此我运行以下命令:

as --32 tst.s -o tst.o && ld -m elf_i386 tst.o -o tst

当我尝试运行我的对象时,我收到一个错误:

./tst.o
bash: ./tst.o: cannot execute binary file: Exec format error

我做错了什么?我不确定我的代码是否有问题,或者我需要一些特殊的东西才能在我的64位机器上运行32位代码。

我添加了我正在尝试运行的代码:

.code32
.section .text
.global _start
_start:
        call main
        jmp exit
.global factorial
.type factorial, @function
factorial:
        pushl %ebp
        movl %esp, %ebp
        subl $8, %esp
        movl 4(%ebp),%eax
        addl 4(%ebp),%eax
        movl %eax, -8(%ebp)
        movl -8(%ebp),%eax
        movl %eax, -4(%ebp)
        movl %ebp, %esp
        popl %ebp
        ret
.global main
.type main, @function
main:
        pushl %ebp
        movl %esp, %ebp
        subl $16, %esp
        movl $5,%eax
        movl %eax, -8(%ebp)
        movl -8(%ebp),%eax
        movl %eax, -4(%ebp)
        movl -4(%ebp),%eax
        movl %eax, -16(%ebp)
        pushl -16(%ebp)
        call factorial
        movl %eax, -12(%ebp)
        addl $4,%esp
        movl -12(%ebp),%eax
        movl %ebp, %esp
        popl %ebp
        ret
.type exit, @function
exit:
        movl $0, %ebx
        movl $1, %eax

0 个答案:

没有答案