NASM: Invalid memory reference (SIGSEGV) - Assembler

Узнай цену своей работы

Формулировка задачи:

Всем привет. Изучаю ассемблер, пользуюсь NASM. Подскажите нубасу, что не так в коде? Я вот что-то не могу найти "не валидную ссылку на память". Что не так? Спасибо.
Листинг программы
  1. global _start
  2. section .text
  3. _start:
  4. xor rax, rax
  5. push qword 256
  6. push qword 0
  7. push array
  8. call fill
  9. sub rsp, 24
  10. ret
  11. fill:
  12. ; create stack frame
  13. push rbp
  14. mov rbp, rsp
  15. sub rsp, 24
  16. ; save data of using registers
  17. mov [rbp-8], rax
  18. mov [rbp-16], rcx
  19. mov [rbp-24], rdi
  20. ; check passed counter
  21. mov rcx, [rbp+16]
  22. jrcxz fill_quit
  23. ; get parameters from stack
  24. mov rax, [rbp+24]
  25. mov rdi, [rbp+32]
  26. fill_payload:
  27. ; fill loop
  28. mov [rdi], al
  29. loop fill_payload
  30. ; restore registers value
  31. mov rax, [rbp-16]
  32. mov rdi, [rbp-24]
  33. fill_quit:
  34. ; restore stack
  35. mov rcx, [rbp-8]
  36. mov rsp, rbp
  37. pop rbp
  38. ret
  39. section .bss
  40. array resb 256
http://rextester.com/KZM21563 PS. Собственно решил узнать, что такое stack frame, хотя-бы примерно, а то до этого в дизассемблере для меня были темным лесом конструкции:
Листинг программы
  1. frame:
  2. push ebp
  3. mov ebp, esp
  4. sub esp, 16 ; allocate stack memory
  5. ; [ebp - n] - points to allocated memory
  6. ; [ebp] - points to old value of ebp
  7. ; [ebp + 4] - points to the return address
  8. ; [ebp + n] - parameters for function
  9. mov esp, ebp
  10. pop ebp
  11. ret
Вкратце по функции, это мой быдло аналог
Листинг программы
  1. std::memset(void*, int value, std::size_t count);
Заливает count байт памяти, по переданному адресу, значением переданного байта (передаю rax, юзаю al).

Решение задачи: «NASM: Invalid memory reference (SIGSEGV)»

textual
Листинг программы
  1. 0 ---> Рост ---> RSP FFFFFFFEh
  2. |-------------------------|-----------|
  3. Фрейм в 24 байта

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут