2013-04-07 3 views
2

프로그램의 시스템 호출을 계산하기 위해 ptrace를 사용하고 있습니다.
문제는 프로그램 A가 주어지면 내 프로그램은 만든 syscalls (열린, 닫기, 읽기, 쓰기)의 번호를 출력한다는 것입니다.프로그램의 syscalls 계산 및 strace를 사용하여 결과의 ​​유효성 확인

프로그램 A를 인수로 사용하는 my program 및 strace (-c 옵션 사용)의 결과는 열려있는 syscall을 제외하고는 동일합니다.
내 프로그램은 15 strace를 인쇄

3. 인쇄하지만 strace를뿐만 아니라 다른 콜을 인쇄로,이 내 프로그램이 카운트 15 개 열린 콜로 요약 할 수 있다고 추측하고있다.

ORIG_EAX/RAX 레지스터를 찾을 때 ptrace의 결과를 확인하기 위해 SYS_open을 사용하고 있습니다. 인쇄 strace를

시스템 콜은 here.

업데이트 :
내가 터미널에서 내 프로그램을 컴파일하고 거기에서 그것을 실행하고, 결과의 strace와 동일하다.
netbeans에서 개발 중입니다.

왜 이런 일이 발생 했습니까?

+0

@ user315052 : 차이점은 무엇입니까? 나는 단지'SYS_open'을 사용하고 있습니다. (30 분 전에 업데이트를 추가했습니다. 제발보십시오) – Chris

+0

15 개가 열렸다는 것을 어떻게 계산합니까? 네가 얼마나 생각해? –

+0

@JonathanLeffler : 카운터를 사용하면 ptrace에서 반환 된 값이 SYS_open 일 때마다이를 증가시킵니다. 또한, syscalls를 두 번 계산하지 않았습니다 (wait가 두 번 (2 개의 인터럽트를 반환) 이후). 나는 3 회의 폐쇄 (strace와 동일)를 가졌다. – Chris

답변

1

netbeans가 ptrace를 사용하여 사물을 제어하는 ​​것처럼 들립니다. (결국, 중단 점과 단계없이 어떻게 중단 점을 수행 할 수 있습니까?) 그래서 netbeans는 프로그램에 무해한 신호를 보낼 수 있습니다.

strace -o/tmp/foo (-c없이)를 실행하여 현재 진행중인 작업을 정확하게 찾을 수 있습니다. (netbeans 및 netbeans의 출력을 다른 것을보기 위해 비교하십시오.)

특정 호출을 필터링하려면 "-e open, close"를 추가하십시오.

+0

흠, 이것 일 수도 있습니다. 게시 한 strace 명령을 언제 실행합니까? 하나는 개발중인 프로그램과 함께 넷빈과 다른 하나? (이것은 소리가 나지 않습니다 : P) – Chris

관련 문제