FASM gives me 'error: illegal instruction.' during assembly
FASM gives me 'error: illegal instruction.' during assembly
我刚开始用汇编编码。我已经下载了 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
有人能找出问题所在吗?
第二行少了一个space
section .text
global _start
参见 here
问题是您使用的是 FASM,但是您从互联网上获得的代码是 NASM。如果你要安装 NASM 到你的 Linux 发行版中,如果你使用 NASM 并且你在这一行修复了错误,你的代码应该可以工作:
global_start ;must be declared for linker (ld)
应该是:
global _start ;must be declared for linker (ld)
全局指令在标签_start
前需要一个space
如果您想使用 FASM,我建议您查找一些特定于该汇编程序的示例和教程。如果您打算在汇编方面进行任何重大开发,我会推荐 NASM 或 GNU 汇编程序(gas)。
用引号写 section '.text'
并且没有 global
afaik,请改用 public _start
。 FASM 可以用 format ELF64 executable
作为第一行为您构建可执行的 ELF。现在你可以使用 segment executable
和 entry _start
如果你不想 link 它与其他目标文件。
我推荐使用
section '.text'
例如,
您可以这样使用代码:
section '.text' code readable executable
或
section '.idata'
在节后定义时要小心使用''。
我刚开始用汇编编码。我已经下载了 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
有人能找出问题所在吗?
第二行少了一个space
section .text
global _start
参见 here
问题是您使用的是 FASM,但是您从互联网上获得的代码是 NASM。如果你要安装 NASM 到你的 Linux 发行版中,如果你使用 NASM 并且你在这一行修复了错误,你的代码应该可以工作:
global_start ;must be declared for linker (ld)
应该是:
global _start ;must be declared for linker (ld)
全局指令在标签_start
前需要一个space如果您想使用 FASM,我建议您查找一些特定于该汇编程序的示例和教程。如果您打算在汇编方面进行任何重大开发,我会推荐 NASM 或 GNU 汇编程序(gas)。
用引号写 section '.text'
并且没有 global
afaik,请改用 public _start
。 FASM 可以用 format ELF64 executable
作为第一行为您构建可执行的 ELF。现在你可以使用 segment executable
和 entry _start
如果你不想 link 它与其他目标文件。
我推荐使用
section '.text'
例如, 您可以这样使用代码:
section '.text' code readable executable
或
section '.idata'
在节后定义时要小心使用''。