대화 상자, 트랩 및 SIGTRAP

대화 상자, 트랩 및 SIGTRAP

다음과 같은 줄이 포함된 스크립트에 대화 상자 도구를 사용하는 많은 예를 보았습니다.

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또는 ) 시스템 호출에 사용됩니다. 프로세스가 다른 프로세스의 활동을 모니터링하는 경우 자식 프로세스가 대부분의 경우 무슨 일이 일어나고 있는지 효과적으로 알 수 없더라도 자식 프로세스를 "중단"하는 데 많이 사용됩니다(모니터링되는 프로세스가 반드시 이를 알아차릴 필요는 없음). 추적기는 전달된 신호를 가로채고 필터링할 수 있으며 주로 주목할만한 일이 발생했음을 추적기에 알리는 데 사용되기 때문에 어떤 신호가 전송되었는지가 있습니다.straceptrace(2)ptrace(2)SIGTRAPptrace(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접두사 +는 32바이트를 사용합니다.int 3
  • int3NASM의 특수 1바이트 길이 인코딩

1바이트 길이의 인코딩은 GDB의 기초입니다. 명령어가 1바이트보다 크면 여러 명령어가 포함될 수 있어 혼란스러울 수 있습니다.

관련 정보