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 байта
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д