Код: Выделить всё
section .rodata
a dq 10
section .data
section .bss
section .text
global _start
_start:
main:
push rbp
mov rbp,rsp
sub rsp, 32
mov rax, [a]
mov [rbp - 8], rax
add rsp, 32
leave
ret
_exit:
mov rax, 60
mov rdi, 0
syscall
но наверняка что-то не так, иначе не было бы ошибки сегментирования, поэтому я попробовал отладку с помощью следующих средств: -
1. Сначала я попробовал использовать GDB для соответствующего кода и обнаружил следующее после "0x0000000000401019 : ret", когда я пишу ni (nexti), адрес выглядит примерно так: "0x0000000000000001 in ?? ()" вместо _exit, который он имел ?? в качестве адреса, что означает, что ассемблер не сохраняет информацию об указателе стека, который должен был быть сохранен при выполнении mov rbp, rsp, который я проверял с помощью gdb (информационный фрейм и информационный стек) , все происходит нормально.
2. поэтому я проверил Интернет - ну, я почти ничего не нашел (ну, это был быстрый поиск, примерно за 5 минут, прежде чем я сдался)
3. затем, после длительной отладки, я посмотрел на свой код и понял, что возвращаюсь к _start, так и не дойдя до метки _exit , но почему такое глубокое предупреждение через уведомление системы, как будто я думаю, что делал это раньше, даже когда был задействован кадр стека, но я никогда не получал такого глубокого предупреждения
главный вопрос - поэтому мой главный вопрос на самом деле заключается в том, почему такое предупреждение только в этот раз, а не в другие разы, когда я делал такое бесконечное прыгает
важное примечание – просто чтобы внести ясность, этот вопрос строго не о ошибке сегментации, а о контексте уведомления
Подробнее здесь: https://stackoverflow.com/questions/798 ... -on-my-x86
Мобильная версия