2013-04-24 2 views
1

과제가 생겼으므로 응용 프로그램의 시스템 호출을 추적하기 위해 ptrace를 사용해야합니다. 문제는 내가 프로그램을 실행할 때 흔히 볼 수없는 값을 레지스터에서 출력으로 얻는다는 것입니다. 이 값 중 일부는 음수입니다. 여기 레지스터에 ptrace 비정상 값이 반환되었습니다.

코드입니다 : http://pastebin.com/iMXYmqG6 그리고 여기에 몇 가지 샘플 출력 : http://pastebin.com/bVa5vnWT

누군가가 나에게 내가 정말 감사하겠습니다 잘못 뭐하는 거지에 대한 몇 가지 지침을 줄 수 있다면.

P. 64 비트 OS에서 작업하고 있지만 32 비트 응용 프로그램을 작성 중입니다. 할당에 대한 제한 사항입니다.

+0

아마 무작위 거대한 숫자는 호출에 3 개 이하의 매개 변수가 필요하고 필요하지 않은 숫자가 무시되기 때문일 수 있습니다. – Patashu

+0

글쎄, 모든 호출을 체크하지는 않았지만 적어도 오픈, 읽기 및 쓰기 호출에는이 사이트 http://cs.lmu.edu/~ray/notes/linuxsyscalls/에 기반한 3 개의 매개 변수가 필요하며 그 호출은 거대한 음수도. –

+0

erm 내가 왜 그 이상한 값을 얻는 지 알 것 같아요, 아마 32 비트 디버거로 64 비트 애플리케이션을 디버깅하려하기 때문일 겁니다. 그럴 수 있습니까? –

답변

1

64 비트 OS를 사용하면서 64 비트 호환 레지스터를 사용해야합니다. 즉, RAX, ORIG_EAX, EBX, EBX ..... 가비지 값을 얻지 못하면