[英]NASM Hello World Segmentation Fault
所以是的,我正在修补汇编级编程......
这是我到目前为止所拥有的。
global _start
section .text
_start:
mov eax, 4 ; write
mov ebx, 1 ; stdout
mov ecx, msg
mov edx, msg.len
int 0x80 ; system call
mov eax, 1 ; exit
mov ebx, 0 ; exit code
int 0x80 ; system call
section .data
msg: db "Hello world!", 10 ; Defines the string "Hello world!\n"
.len equ $-msg
语句.len equ $-msg
工作的? 我明白这是字符串的长度。 我也知道equ就像C中的#define
一样。所以这个变量在内存中不存在,它由汇编程序放置。 (NASM)
$符号做了什么,后来发生了减法?
我的输出导致了段错误,我希望当我理解 我已经修复了这个错误,但仍然不理解$的概念。 .len equ $-msg
语法时我能够自己解决这个问题。
EDIT Segfault是由于这是一个格式错误的程序。 固定
$
表示当前行的地址。 所以以下内容:
.len equ $-msg
表示当前地址减去msg
的地址。 这使存储之间的数据的长度msg
和.len
(自的地址.len
由下式表示$
)。 因此,符号.len
表示(等于)该长度值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.