2013-07-12 6 views
0

dlopen()으로로드 된 공유 라이브러리를 디버깅 할 때 재미있는 점이 발견되었습니다. crypt()에 의해 반환 된 주소는 내 라이브러리에서 호출 할 때 32 비트를 기반으로합니다. 즉, 디버거에서 해당 주소를 보려고 할 때. 이것은 나쁜 주소라고합니다. 이 주소에 내 경우에있는 시프트 인 0xffffffff00000000을 추가하면 올바른 결과를 얻을 수 있습니다. crypt 소스를 보면 crypt이 반환하는 문자열은 정적 문자 배열이지만 주소가 32 비트 인 이유는 분명하지 않습니다. Solaris x64에서 crypt()가 잘못된 주소를 반환했습니다.

은 어떤 아이디어에 사전에 감사하고 char *를 반환으로 crypt()을 선언 함수 프로토 타입을 가지고 있도록 코드에서

답변

1

당신에게 #include <unistd.h> 또는 #include <crypt.h>나요 도와 드릴까요?

함수 프로토 타입이없는 경우 C는 기본적으로 64 비트 시스템에서 32 비트 인 경우에도 int을 반환하며 이는 종종 포인터를 반환하는 함수를 중단시킵니다. 32 비트 시스템의 경우 int은 포인터와 동일한 크기입니다.