![대화 상자, 트랩 및 SIGTRAP](https://linux55.com/image/36812/%EB%8C%80%ED%99%94%20%EC%83%81%EC%9E%90%2C%20%ED%8A%B8%EB%9E%A9%20%EB%B0%8F%20SIGTRAP.png)
다음과 같은 줄이 포함된 스크립트에 대화 상자 도구를 사용하는 많은 예를 보았습니다.
trap "rm $datafile" 0 1 2 5 15
내가 이해하지 못하는 것은 SIGNAL 5가 의미하는 바입니다. 음, SIGTRAP이라는 것은 알고 있습니다. 하지만 슬프게도 나는 아직도 그것이 실제로 무엇을 의미하는지 이해하지 못합니다...
미리 감사드립니다! !
답변1
맨페이지가 있습니다 signal(7)
:
Signal Value Action Comment
SIGTRAP 5 Core Trace/breakpoint trap
이 신호(맨 페이지에 표시됨)는 주로 디버깅 도구(예: 각각 gdb
또는 ) 시스템 호출에 사용됩니다. 프로세스가 다른 프로세스의 활동을 모니터링하는 경우 자식 프로세스가 대부분의 경우 무슨 일이 일어나고 있는지 효과적으로 알 수 없더라도 자식 프로세스를 "중단"하는 데 많이 사용됩니다(모니터링되는 프로세스가 반드시 이를 알아차릴 필요는 없음). 추적기는 전달된 신호를 가로채고 필터링할 수 있으며 주로 주목할만한 일이 발생했음을 추적기에 알리는 데 사용되기 때문에 어떤 신호가 전송되었는지가 있습니다.strace
ptrace(2)
ptrace(2)
SIGTRAP
ptrace(2)
SIGTRAP
이 경우 ptrace(2)
맨페이지를 살펴보는 것이 매우 유익할 수 있습니다.
답변2
나는 그 진정한 의미를 이해하지 못한다
어떻게 생산되고 사용되는지 살펴보겠습니다.
SIGTRAP의 주된 이유는 int3
지시문입니다.
다음을 통해 확인할 수 있습니다.
int main() {
asm("int3");
return 0;
}
런타임 출력:
Trace/breakpoint trap (core dumped)
종료 상태 133
= 128 + 5이므로 신호 5, SIGTRAP입니다.
GDB는 int3
명령어를 텍스트 세그먼트에 삽입하고 설정한 ptrace
다음 프로그램을 실행하게 합니다. 에 도달하면 int3
자녀 ptrace
의 상태를 모니터링할 수 있는 부모를 깨웁니다.
메커니즘이 다른 하드웨어 중단점도 있습니다.하드웨어 중단점과 소프트웨어 중단점의 차이점은 무엇입니까? |스택 오버플로
int3에 대한 추가 정보
int3
두 가지 인코딩이 있습니다.
- NASM의 일반
int
접두사 +는3
2바이트를 사용합니다.int 3
int3
NASM의 특수 1바이트 길이 인코딩
1바이트 길이의 인코딩은 GDB의 기초입니다. 명령어가 1바이트보다 크면 여러 명령어가 포함될 수 있어 혼란스러울 수 있습니다.