Linux에서 "truss -T"및 "truss -U"에 해당합니까?


12

Linux 에서 Solaris 유틸리티 의 -T-U옵션 과 동일한 기능이 있습니까?truss

추적 된 애플리케이션이 호출 할 때 시스템 호출 ( -T) 또는 라이브러리 함수 ( -U) 를 지정해야합니다 .

또는 그렇지 않으면 추적 된 응용 프로그램으로 시작한 프로세스가 주어진 시스템 호출이나 지정된 공유 라이브러리 함수 호출을 수행하자마자 중지 (SIGSTOP에 의해 종료 된 것처럼)되고 싶습니다.

straceltrace리눅스에서 솔라리스 된 형상의 많은으로 제공 truss하지만, 그들은 그 일을 할 것 같지 않습니다.

예를 들어 :

truss -f -T open cmd

같은 것 strace -f cmd제외하고 그 프로세스가 실행하는 경우 cmd또는 그 자손 않는 open시스템 호출이 즉시 중단시킬 것 (그리고 나는 내 편의에 나중에 그것을 다시 시작할 수 있습니다)

어떤 경우에는, 내가 사용할 수있는 gdb'들 catch syscall,하지만 난 편리하게 포크를 따라 모든 갈래의 프로세스에 대한 그 일을 계속 후에도 그 일을 계속 할 수있는 솔루션을 찾고있었습니다 execve들.

syscall이 원격으로 발생하는 단일 단계 응용 프로그램에 동일한 기능을 제공하는 유틸리티 (또는 동일한 유틸리티에 대한 옵션)를 기억하는 것처럼 보입니다. 그러나 메모리가 부족하여 확실하지 않습니다. 그것은 리눅스에 있었다.


1
실제로 귀하의 질문에 대한 답변은 아니지만 gdb에는 포크를 따라갈 수있는 몇 가지 옵션이 있습니다. 그래도 여전히 한 번에 하나의 프로세스 만 수행하지만 strace와 같은 기능을 찾고 있다면 아마도 거래 차단기 일 것입니다.하지만 경우에 따라 언급 할 것이라고 생각했습니다.
Bratchley 2016 년

@JoelDavis, 감사합니다. 그리고 그것은 exec 후에도 따라갈 수있는 것처럼 보입니다. ( follow-exec-mode), 나는 그것을 실험하고 있습니다. 질문에 엄격하게 대답하지는 않지만 필요한 것에 충분할 수 있습니다.
Stéphane Chazelas 2016 년

귀하의 질문을 이해하면 특정 신호가 보일 때까지 추적 한 다음 추적을 중지하고 추적하는 응용 프로그램을 중단하거나 종료하지 않는 방법을 찾고 있습니까?
slm

@slm, 아닙니다. 추적 된 응용 프로그램으로 시작된 프로세스가 주어진 시스템 호출을 수행하자마자 중지됩니다 (SIGSTOP에 의해 종료 된 것처럼). Solaris truss맨 페이지 에 대한 링크를 추가했습니다 .
Stéphane Chazelas

올바르게 이해하도록하겠습니다. 특정 시스템 호출을 할 때 프로세스를 중지하는 방법을 원합니다. 그 맞습니까?
sparticvs 2016 년

답변:


3

내가 아는 한 strace, ptrace내부적으로 SIGSTOP또는 SIGINT호출에서 사용되는 함수 인 으로 수행 할 수 없습니다 .

편집하다:

이 간단한 솔루션을 ministrace에 삽입 했으므로 코딩이 필요하지 않습니다.

내 제안 된 솔루션의 strace의 모든 기능이 필요한 경우, ministrace을 수정하는 것입니다 - 내가 여기있는 코드의 70 개 라인에서 자신에게 strace를 쓰기 .

원샷 프로그램에서는 다음 코드 앞에 두 줄을 추가 할 수 있습니다.

if (wait_for_syscall(child) != 0) break;

의사 코드 :

if(syscall == SYS_write)
    do {
        char str[4];
        gets(str);  // waits until enter to continue    
    } while(0);

나는 이것의 어느 것도 보지 않았다.이 마지막 단계는 당신에게 맡겨져있다.


감사. 그것은 작동하고 그 링크는 매우 유용합니다. 그러나 (몇 줄의 코드에서 이해할 수 있음) gdb / strace가 수행하는 arg 디코딩을 수행하지 않으므로 내 목적에 유용하지 않을 것입니다. 그것은 쉽게 완료되었음을 보여줍니다. 나는 결국 gdb로 갔지만 그 기능에 대한 strace 패치는 비교적 쉬운 것처럼 보입니다. 기존 명령이 있다고 생각되면 질문을 열어 두십시오. 시간이 있으면 python-ptrace를 살펴 보겠습니다.
Stéphane Chazelas

천만에요! 구현을 확장하는 데 약간의 노력을 기울 였으므로 id와 이름으로 syscall을 참조 할 수 있습니다. ptrace로 다시 연주하는 것은 재미있었습니다.
Daniël W. Crompton

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.