【发布时间】:2016-05-06 13:04:30
【问题描述】:
SASM IDE 是一个支持 NASM 的跨平台 IDE。它提供调试功能,在程序执行过程中观察寄存器。以下代码使用 NASM 编译没有任何问题。
section .data
hello db "Hello World!",0xa
len equ $-hello
section .text
global _start
_start:
mov eax, 4
mov ebx, 1
mov ecx, hello
mov edx, len
int 80h
mov eax, 1 ; exit(0)
mov ebx, 0
int 80h
但是,如果您尝试在 SASM IDE 中执行相同的代码,它就不起作用。这里是完整的错误信息。
[14:46:07] 警告!构建中出现错误:
/tmp/SASM/program.o:/tmp/SASM/program.asm:9:_start'
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../../../lib/crt1.o:(.text+0x0): first defined here
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../../../lib/crt1.o: In function_start'的多重定义:
(.text+0x20): 未定义的对“main”的引用
collect2: Fehler: ld gab 1 饰演 Ende-Status zurück
[14:46:07] 在调试之前,您需要构建程序。
因为它不起作用,所以我想 SASM IDE 和 NASM 之间肯定有区别(通常我认为 SASM 或多或少只是 NASM 的 GUI)。
在 SASM 中编译程序必须满足什么要求?
【问题讨论】:
-
SASM 似乎说你应该使用
CMAIN宏作为入口点,而不是_start。