Assembly 整数$0x80,从头开始编程
我最近开始阅读,但在第一个节目中遇到了一个问题。程序非常简单:Assembly 整数$0x80,从头开始编程,assembly,x86-64,Assembly,X86 64,我最近开始阅读,但在第一个节目中遇到了一个问题。程序非常简单: .section .data .section .text .globl _start _start: movl $1, %eax movl $0, %ebx int $0x80 但是在编译和运行时,我得到了错误非法指令:4。我确实编辑了程序,使其能够正确编译(删除了两个.sections,并将\u start更改为\u main),因此可能会影响它 我使用的是x86_64指令集(英
.section .data
.section .text
.globl _start
_start:
movl $1, %eax
movl $0, %ebx
int $0x80
但是在编译和运行时,我得到了错误非法指令:4
。我确实编辑了程序,使其能够正确编译(删除了两个.section
s,并将\u start
更改为\u main
),因此可能会影响它
我使用的是x86_64指令集(英特尔处理器)。如果使用的是x86-64,则需要稍微更改ABI,请参阅。有关这些差异的非常好的总结,请参阅文章。这段代码对我来说很好(在Linux上)。你在用什么操作系统?尽管如此,为什么要调用
fork
(2)syscall?也许,您需要退出系统调用(1)?啊,那是一个输入错误。我在MacOS10.7上。将其更改为1没有帮助。你是怎么编译的?我刚刚使用的是gcc
。这可以编译,但是在链接时:$ld exit-o exit/ld:warning:-macosx\u version\u min未指定,假设架构x86的10.7/未定义符号:/“start”,引用自:/-u命令行选项/(可能您的意思是:\u start)/ld:symbol(s)未找到推断体系结构x86_64
如果您的代码在exit.s中,请尝试作为exit.s-o exit.o&&ld exit.o-o exit
有人可以指出,.section data、.section text和movl$1的含义,%eax执行指令movl$1,%eax存储系统调用或与值$1对应的系统调用存储在$eax中