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 als Ende-Statuszurück
[14:46:07]在调试之前,你需要构建程序。
因为它不起作用我想SASM IDE和NASM之间肯定存在差异(通常我认为SASM或多或少只是NASM的GUI)。
在SASM中编译程序必须满足哪些要求?
答案 0 :(得分:0)
好的,它适用于以下修改。 (包含在第一行并将_start更改为CMAIN)
%include "io64.inc"
section .data
hello db "Hello World!",0xa
len equ $-hello
section .text
global CMAIN
CMAIN:
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和NASM之间的区别是什么?在我看来,不再是NASM支持,因为原生NASM程序在没有修改的情况下是不可执行的。或者是否有设置来执行这些程序?