我刚开始编写汇编代码。我已经从互联网上下载了flat assembler和复制的代码。但是,当我运行此代码时,它会显示如下内容:
section .text error: illegal instruction.
我的问题是:这段代码出了什么问题?
section .text
global_start ;must be declared for linker (ld)
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;our dear string
len equ $ - msg ;length of our dear string
有人可以弄清楚出了什么问题吗?
答案 0 :(得分:3)
答案 1 :(得分:3)
使用引号标记section '.text'
并且没有global
afaik,而是使用public _start
。 FASM可以为您构建可执行的ELF,format ELF64 executable
作为第一行。现在,如果您不想将其与其他对象文件链接,则可以使用segment executable
和entry _start
。
答案 2 :(得分:1)
问题是您使用的是 FASM ,但您从互联网上获取的代码是 NASM 。如果您要在Linux发行版中安装NASM,那么如果您使用 NASM 并修复此行中的错误,则代码应该可以正常运行:
global_start ;must be declared for linker (ld)
应该是:
global _start ;must be declared for linker (ld)
global指令在标签 _start
之前需要一个空格如果您希望使用 FASM ,我建议您查找一些特定于该汇编程序的示例和教程。如果你要在装配方面做任何重大的开发,我会推荐 NASM 或GNU汇编程序(gas)。
答案 3 :(得分:0)
我建议使用
section '.text'
例如, 您可以这样使用代码:
section '.text' code readable executable
OR
section '.idata'
在节后定义时要小心使用''。