Я сделал небольшой ассемблерный код для регистрации обработчика сигнала.
.section .data
.set SIGSEGV, 11
.set SA_SIGINFO, 4
.section .bss
.lcomm my_sigaction, 140 # size of sigaction struction is 140
.section .text
.global main
myhandler:
nop
push %eax
pop %eax
main:
# Registring signal handler for SIGSEGV
movl $myhandler, my_sigaction # fill sa_handler field
movl $132, %edi # fill sa_flags field
movl $SA_SIGINFO, my_sigaction(,%edi,1) # SA_SIGINFO designate that whenever signal appears, run the signal handling function.
# Call sigaction(int, const struct sigaction *, struct sigaction *)
pushl $0 # 1st param : oact
pushl $my_sigaction # 2nd param : act
pushl $SIGSEGV # 3rd param : sig
call sigaction
addl $12, %esp
jmp 0x11223344 # Segmantation fault
Когда я выполняю скомпилированный двоичный файл, myhandler
работал хорошо.
Однако ... когда я попытался отладить это, gdb просто остановился после сигнала SIGSEGV .
Так что я не смог дозвониться до myhandler
с gdb ..
Вопрос.
Как мне отладить функцию myhandler
, которая запускается после сигнала SIGSEGV?
PS 1. Я проверил здесь , но настройка режима последующей обработки в моем случае не помогла. ; (
PS 2. Я проверил здесь , но после подтверждения handle SIGSEGV nostop
, gdb бесконечно выдает сообщение "Программный принятый сигнал SIGSEGV, Ошибка сегментации", когда SIGSEGV произошел ...