2012-03-19 2 views
1

명령 (예 :/bin/ls)에 의해 실행 된 모든 시스템 호출을 나열하는 프로그램을 작성했습니다. 이제는 모든 시스템 호출 인수, 환경 변수, 전달할 수있는 명령 줄 인수를 찾으려고합니다.
ptrace를 사용한 시스템 호출 추적

예 : 파일을 여는 경우. 시스템 호출 sys_access가 파일을 올바르게 엽니 다? 그러나 이러한 가치를 얻는 방법은 무엇입니까?
open, read, write, close와 같은 시스템 호출에서이 작업을 수행하려고합니다.

내 연구에 따르면 레지스터에 있어야합니다 (ebx - edx) 그렇다면이 레지스터 값은 무엇을 의미합니까? 이 부분은 link입니다.
그러나 나는 거기에서 많은 것을 정말로 얻을 수 없었다. 또한 이것에 대한 더 이상의 참조는 많은 도움이 될 것입니다.

+1

이 도움이됩니까? http://lxr.free-electrons.com/source/include/linux/syscalls.h – dbrank0

+0

@ dbrank0 : 정말 고마워요. 참으로 도움이됩니다. 하지만 한 가지 더 질문이 있습니다. EBX : 004c48de ECX : 내 이전 프로그램의 출력이 'code'SYSCALL (33)과 같다 00000000 EDX : 004c8ff4/액세스 RETURN 33 : fffffffe 이의 값을 16 진수에 . 그럼 어떻게 이해할 수 있니? 나는 멍청한 프로그래머입니다. 죄송합니다 내 무지에 대한 –

+1

파일 이름은 0x4c48de에 저장됩니다 모드는 0 (모드 플래그를 정의 참조) edx는 관련이 없으며 정의되지 않은 무언가를 포함하고 반환 값 -2 (읽기 전용 파일 시스템에 대해 불평)입니다. – dbrank0

답변

0

(위 의견 (그래서 당신이 그것을 받아 들일 수)의 개정 양식) :

자세한 콜 파라미터는 리눅스 커널 헤더 syscalls.h에서 조회 할 수 있습니다. 위의 경우 이 sys_access (x86에서 # 33) 두 개의 매개 변수가로 : 파일 이름이 주소 0x4c4d8e에 저장 그래서,

  • 첫번째 파일 이름에 대한 포인터입니다
  • 두 번째 매개 변수는 파일 모드입니다 (참조 이 콜에는 세번째 파라미터가 없으므로 모드 플래그)
  • 을 정의 EDX 관련되지 않고, 일부 부정 값이 콜의

리턴 값을 포함 -2 (ENOENT, errno-base.h 정의)하는 의미 오류 (해당 파일이나 디렉토리 없음).

strace 유틸리티의 기능을 복제한다는 점에 유의하십시오 (위 Basile의 설명 참조).

+0

다시 감사드립니다. 내가 그것을 배울 수 있도록 나는 ptrace에서 그것을하려고 노력했다. Bt는 C에서 사용하기에 더 친숙하지 않다? 나는 peekuser, getregs와 모두가 재미 있다는 것을 의미합니다. : D –

+0

일정에 따라 게임을 즐기는 것이 즐겁습니다. :) – dbrank0