2008-09-26 6 views
2

우리 소프트웨어를 실행할 때 테스터는 Windows의 데이터 실행 방지 대화 상자에 직면했습니다.트랙 데이터 실행 방지 (DEP)

디버깅을 위해 개발자 컴퓨터에서이 상황을 재현하려고합니다. 성공하지 못했습니다.

DEP 보호로 인해 응용 프로그램이 종료 될 수있는 원인을 찾는 방법을 아는 사람이 있습니까? 사용할 수있는 기존 도구가 있습니까?

답변

4

DEP 대화 상자는 일반적으로 실행 파일로 표시하지 않는 영역의 코드를 실행하려고 할 때만 표시됩니다. 이는 사용중인 도서관의 '썽크 (thunks)'가 원인 일 수 있습니다. ATL 윈도우. 이 문제는 ATL 8.0에서 수정되었습니다.

반환 할 주소를 실행 가능하지 않은 위치로 설정하면 스택 오버런 버그 (예 : 버퍼 오버런)가 발생할 수 있습니다. 프로세스에 대해 DEP가 해제되어 있거나 하드웨어에서 DEP가 사용 가능하지 않으면 액세스 위반이 아닌 이상한 동작이 발생할 수 있습니다.

C++ 예외를 발생 시키거나 SEH 예외를 발생시키고 구조화 된 예외 핸들러가 버퍼 오버런에 의해 휴지통으로 이동 한 경우에도 발생할 수 있습니다.

0

잠재적으로 나는 이것이 할당되지 않은 메모리에 쓸 때마다 가능한 결과라고 생각할 것입니다. 객체를 삭제 한 다음 그것을 사용하기에 너무 작은 버퍼에 문자열을 쓰는 선상에있는 모든 것이 될 수 있습니다.

+0

DEP가 내 애플리케이션을 죽일 수있는 모든 이유를 알고 있습니다. 문제는 응용 프로그램이 10 년 동안 보류되어 있고 많은 코드와 라이브러리가 포함되어 있다는 것입니다. "손으로"가능한 원인을 찾는 것이 다소 문제입니다. – Nicolas

+0

스택 덤프가 없거나 매우 자세한 로깅을 사용하지 않으면 오류가 해결되면 SOL이됩니다. 추적이 쉽고 재현성이 좋지 않을 때 문제를 바로 잡는 것이 정지 문제입니다. – tloach

0

DEP는 하드웨어 기능의 영향을받습니다. 우리는 최근에 우리의 응용 프로그램이 오래된 컴퓨터에서는 잘 돌아 갔지만 새로운 컴퓨터에서는 실패 할 것입니다. DEP가 이전 서버와 새 서버 모두에서 활성화되었지만 하드웨어 검색이 더 좋거나 공격적 이었기 때문에 새로운 서버에서 충돌했습니다. 따라서 귀하의 QA가 재현 할 수 있지만 DEV는 불가능합니다. 동일한 하드웨어로 시도하십시오 ... QA가 개발자보다 최신/우수한 PC를 보유하는 것이 부당한 것처럼 보이지만 ... 전적으로 믿습니다!
다음은이 최근 경험에 대한 나의 메모입니다. Incompatibilities between Indy 9 and Windows Server 2003?