2017-04-21 15 views
0

내 프로그램에서 가능한 오류를 찾기 위해 strace를 사용하고 내가이 출력이의 인쇄 경로 : 값이 주소에 저장하는 방법을 나에 strace를 얘기하는 방법을strace를 대신 주소

open(0x7765533c, O_RDONLY) = -1 EACCES (Permission denied) 

경로 매개 변수를 인쇄 하시겠습니까?

+0

strace는 항상 시스템에서이 작업을 수행합니까, 아니면 사용자 프로그램에서만 수행합니까? 왜냐하면 내가 그것을 사용할 때마다 항상 'open'의 첫 번째 매개 변수가 문자열로 표시되기 때문입니다. –

+0

아니요, 동적 연결의 경우와 같이 다른 호출의 경우 strace는 대신 문자열을 표시합니다. 이 출력의 열린 트레이스는 내가 사용하고있는 라이브러리에서 가져온 것이고, 내 자신의 코드에서 가져온 것이 아닙니다. –

답변

0

strace는 포인터가 유효한 메모리 위치를 가리 키지 않기 때문에 문자열을 표시 할 수없는 경우 포인터 값을 표시합니다. 이 경우 포인터의 바이트는 의심스럽게 ASCII처럼 보입니다.

77 65 73 3c 
w e s < 

문자열에서 4 바이트를 추출하여 포인터로 잘못 해석했습니다.

적어도 그 모양은 대부분 같습니다. 설명 할 수없는 한 가지가 있습니다. 그게 EFAULT 대신 EACCES를 얻은 방법입니다.