У меня есть небольшая программа, которая просто добавляет элемент в стек, а затем входит в функцию, чтобы добавить еще один элемент. Проблема в том, что каждый раз, когда вы его выполняете, он ведет себя странно.
Вот функция:
.section .data
.section .text
.globl _start
_start:
# Push
push $1
# Function call
call pfun
movq $60, %rax
syscall
.type pfun, @function
pfun:
# Push
push $2
# Return
ret
Ничего сложного, но это не приведет к ошибке сегментации, и если вы попытаетесь отладить ее, вы обнаружите, что ошибка возникает, когда программа входит в функцию, но не будет иметь никакой информации о том, где она находится.
Программа получила сигнал SIGSEGV, Ошибка сегментации.
0x0000000000000002 в ?? ()
Теперь, если вы добавите «pop» после функции push и запустите ее, она будет успешно скомпилирована и запущена. НО если вы отладите его, вы увидите, что он никогда не попадет внутрь функции, используя команду «n» (следующая).
Я искал ответ, но не нашел ничего похожего для ASM. Недавно начал изучать ASM, и для меня это выглядит великолепно, поэтому я не знаю, почему это может произойти.