I'm trying to understand how $ works in nasm. I read this answer and wrote the following example:
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
The program works as expected. It prints
Some string
but if I replace equ
with db
segment .data
str: db 'Some string',0x0a,0x0d
str_len: db $ - str ; equ --> db
it starts printing lots of garbage data:
Some string
�@`
```"`)`main.asmstrstr_len__bss_start_edata_end.symtab.strtab.shstrtab.text.data�'!`' .