은 sighand 필드를 통해 유형 구조체 sighand_struct이 개체는 구조체의 task_struct에에서 참조
struct sighand_struct {
atomic_t count;
struct k_sigaction action[_NSIG];
spinlock_t siglock;
};
의 개체에 작업별로 저장됩니다. gdb (사용자 공간을위한 도구) 대신 의 충돌을 사용하십시오.
된 task_struct에서 읽기 :
crash> p/x *((struct task_struct*)0xdfcb04c0).sighand
$9 = {
count = {
counter = 0x4
},
action = {{
sa = {
sa_handler = 0x0,
sa_flags = 0x0,
sa_restorer = 0x0,
sa_mask = {
sig = {0x0, 0x0}
}
}
}, {
sa = {
sa_handler = 0x0,
sa_flags = 0x0,
sa_restorer = 0x0,
sa_mask = {
sig = {0x0, 0x0}
}
}
}, {
sa = {
sa_handler = 0x0,
sa_flags = 0x0,
sa_restorer = 0x0,
sa_mask = {
sig = {0x0, 0x0}
}
}
}, {
sa = {
sa_handler = 0x4006ac0d,
sa_flags = 0x10000004,
sa_restorer = 0x0,
sa_mask = {
sig = {0x0, 0x0}
}
}
...
그래서, 우리는 사용자 프로세스 설치 기능은 주소 0x4006ac0d 가리키는 신호 4 (SIGILL이, ID 0 신호가 존재하지 않음) 것을 알 수있다. 그리고 이것은 우리는 간단한 명령으로 확인할 수 있습니다
crash> sig 0xdfcb04c0
PID: 19658 TASK: dfcb04c0 CPU: 0 COMMAND: "FinalizerWatchd"
SIGNAL_STRUCT: e49f33c0 NR_THREADS: 4
SIG SIGACTION HANDLER MASK FLAGS
[1] e49e8004 SIG_DFL 0000000000000000 0
[2] e49e8018 SIG_DFL 0000000000000000 0
[3] e49e802c SIG_DFL 0000000000000000 0
[4] e49e8040 4006ac0d 0000000000000000 10000004 (SA_SIGINFO|SA_RESTART)
[5] e49e8054 SIG_DFL 0000000000000000 0
[6] e49e8068 4006ac0d 0000000000000000 10000004 (SA_SIGINFO|SA_RESTART)
[7] e49e807c 4006ac0d 0000000000000000 10000004 (SA_SIGINFO|SA_RESTART)
[8] e49e8090 4006ac0d 0000000000000000 10000004 (SA_SIGINFO|SA_RESTART)
이 here와 충돌 here
그 신호 처리 표는 커널 안에 대한 처리 신호에 대해 자세히 알아보십시오. gdb를 사용하여 볼 수 없습니다. –