Моя система предупреждает меня уведомлением об ошибке боковой сегментации в моем коде x86-64Linux

Ответить
Anonymous
 Моя система предупреждает меня уведомлением об ошибке боковой сегментации в моем коде x86-64

Сообщение Anonymous »

Когда я компилировал и выполнял соответствующую "x86-64 nasm-программу" , я столкнулся со странным уведомлением о моей системе, в котором говорилось: "{path to the file} обнаружил фатальную ошибку и был закрыт", то есть я не знаю, распространены ли такие типы поведения или нет, но лично я никогда раньше не видел этого, кроме того, ошибка при компиляции была классическим "дамп ядра ошибки сегментации" но даже до этого при преобразовании asm в объектный файл он выдал мне предупреждение: "предупреждение: неявный DEFAULT ABS устарел [-w+implicit-abs-deprecated]" в следующем коде: -

Код: Выделить всё

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

но я думаю, что все делал правильно, например, я выделил память, я скопировал значение внутри opr a в rax, а затем скопировал его в локальную переменную 1, наконец, я освободил память и вернулся с помощью ret, что в конечном итоге привело к выходу
но наверняка что-то не так, иначе не было бы ошибки сегментирования, поэтому я попробовал отладку с помощью следующих средств: -
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»