了解$如何在装配中工作

时间:2017-12-23 19:38:26

标签: linux assembly x86-64

我试图理解$如何在nasm中运作。我读了this answer并写了以下示例:

section .text
    global _start

_start:
    mov rax, 0x01 
    mov rdi, 0x01
    mov rsi, str
    mov rdx, str_len
    syscall

    mov rax, 60
    syscall

segment .data
    str: db 'Some string',0x0a,0x0d
    str_len: equ $ - str

该程序按预期工作。它打印

Some string

但如果我将equ替换为db

segment .data
    str: db 'Some string',0x0a,0x0d
    str_len: db $ - str ; equ --> db

它开始打印大量垃圾数据:

Some string
�@`
```"`)`main.asmstrstr_len__bss_start_edata_end.symtab.strtab.shstrtab.text.data�'!`'    .

0 个答案:

没有答案