繁体   English   中英

NASM Hello World Segmentation Fault

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM