调试 SIGSEGV 信号处理函数

debug SIGSEGV signal handler function

我编写了关于注册信号处理程序的小汇编代码。

.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 2, %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 [=10=]                                # 1st param : oact
    pushl $my_sigaction                     # 2nd param : act
    pushl $SIGSEGV                          # 3rd param : sig
    call sigaction
    addl , %esp

    jmp 0x11223344                         # Segmantation fault    

当我执行编译后的二进制文件时,myhandler 运行良好。

但是...当我尝试调试它时,gdbSIGSEGV[=39= 之后停止了]信号出现。
所以我无法使用 gdb..

到达 myhandler

问题。
如何调试在 SIGSEGV 信号后运行的 myhandler 函数?

PS 1. 我检查了 here,但设置 follow-process-mode 对我的情况没有帮助。 ;(
PS 2. 我检查了 here,但是在断言 handle SIGSEGV nostop 之后,gdb 无限发出 "Program received signal SIGSEGV, Segmentation fault" 消息SIGSEGV 发生...

我自己解决了这个问题。

pwndbg> b myhandler
pwndbg> handle SIGSEGV pass
Signal        Stop  Print   Pass to program Description
SIGSEGV       Yes   Yes Yes     Segmentation fault
pwndbg> handle SIGSEGV nostop
Signal        Stop  Print   Pass to program Description
SIGSEGV       No    Yes Yes     Segmentation fault
pwndbg> r
Breakpoint myhandler

在 SIGSEGV 信号上设置 passnostop 有效!
发生 SIGSEGV 后,我仍然可以在 gdb 上调试二进制文件。