NASM: Invalid memory reference (SIGSEGV) - Assembler
Формулировка задачи:
Всем привет. Изучаю ассемблер, пользуюсь NASM. Подскажите нубасу, что не так в коде?
Я вот что-то не могу найти "не валидную ссылку на память". Что не так? Спасибо.
http://rextester.com/KZM21563
PS. Собственно решил узнать, что такое stack frame, хотя-бы примерно, а то до этого в дизассемблере для меня были темным лесом конструкции:
Заливает count байт памяти, по переданному адресу, значением переданного байта (передаю rax, юзаю al).
Листинг программы
- global _start
- section .text
- _start:
- xor rax, rax
- push qword 256
- push qword 0
- push array
- call fill
- sub rsp, 24
- ret
- fill:
- ; create stack frame
- push rbp
- mov rbp, rsp
- sub rsp, 24
- ; save data of using registers
- mov [rbp-8], rax
- mov [rbp-16], rcx
- mov [rbp-24], rdi
- ; check passed counter
- mov rcx, [rbp+16]
- jrcxz fill_quit
- ; get parameters from stack
- mov rax, [rbp+24]
- mov rdi, [rbp+32]
- fill_payload:
- ; fill loop
- mov [rdi], al
- loop fill_payload
- ; restore registers value
- mov rax, [rbp-16]
- mov rdi, [rbp-24]
- fill_quit:
- ; restore stack
- mov rcx, [rbp-8]
- mov rsp, rbp
- pop rbp
- ret
- section .bss
- array resb 256
Листинг программы
- frame:
- push ebp
- mov ebp, esp
- sub esp, 16 ; allocate stack memory
- ; [ebp - n] - points to allocated memory
- ; [ebp] - points to old value of ebp
- ; [ebp + 4] - points to the return address
- ; [ebp + n] - parameters for function
- mov esp, ebp
- pop ebp
- ret
Вкратце по функции, это мой быдло аналог
Листинг программы
- std::memset(void*, int value, std::size_t count);
Решение задачи: «NASM: Invalid memory reference (SIGSEGV)»
textual
Листинг программы
- 0 ---> Рост ---> RSP FFFFFFFEh
- |-------------------------|-----------|
- Фрейм в 24 байта
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д