При написании простейшей сборки для шеллкода я написал этот код
BITS 64
global _start
section .data
_start:
;ssize_t write(int fd, const void *buf, size_t count);
;rax = 1
jmp poziv
vracajse:
xor rsi,rsi
pop rsi
xor rax,rax
mov al,1 ; were calling write
;The parameters are in rdi, rsi, rdx, r10, r8, r9. in that order
xor rdi,rdi ;
xor rcx,rcx ; need low 8 bytes dont want null in machine code
mov cl,1
mov edi,ecx ; edi =1 writing to stdout
xor rdx,rdx
mov dl,15 ; were writing 15 chars
syscall
poziv:
call vracajse
poruka:
.ascii "Pozdrav svete!\n"
и получил следующую ошибку
writing_2nd_try.nasm:28: error: parser: instruction expected
Почему он говорит мне, что мой код poruka: .ascii «Некоторая строка» не является допустимой инструкцией (метка и сообщение), но если я напишу ее как db, тогда все в порядке.
(Мне также интересно, если я пишу данные .section вместо раздела .data, я получаю следующие ошибки
writing_2nd_try.nasm:3: error: attempt to define a local label before any non-local labels
writing_2nd_try.nasm:3: error: parser: instruction expected
)
Я новичок во всем этом, но я думал, что знаю, что делаю.