функция отладки сигнала SIGSEGV - PullRequest
0 голосов
/ 05 ноября 2018

Я сделал небольшой ассемблерный код для регистрации обработчика сигнала.

.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 произошел ...

1 Ответ

0 голосов
/ 05 ноября 2018

Я решил проблему сам.

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

Настройка pass и nostop для сигнала SIGSEGV сработала!
После того, как произошел SIGSEGV, я все еще могу отлаживать бинарный файл на GDB.

...