문제

소프트웨어 중 하나를 실행할 때 테스터는 Windows의 데이터 실행 방지 대화 상자에 직면했습니다.

우리는 디버깅 목적으로 개발자 컴퓨터 에서이 상황을 재현하려고 노력합니다.

DEP 보호가 신청서를 죽일 수있는 원인을 찾는 방법을 아는 사람이 있습니까? 이를 위해 사용할 수있는 도구가 있습니까?

도움이 되었습니까?

해결책

DEP 대화 상자는 일반적으로 실행 파일로 표시하지 않는 지역에서 코드를 실행하려고 할 때만 표시됩니다. 이것은 당신이 사용하고있는 라이브러리 (예 : ATL 창)에서 '펑크'에 의해 발생할 수 있습니다. 이 문제는 ATL 8.0에 고정되어 있습니다.

스택 트래시 버그 (예 : 버퍼 오버런)는 리턴 주소를 실행 가능한 위치로 설정 하여이 문제를 일으킬 수 있습니다. 프로세스에 대해 DEP가 꺼져 있거나 하드웨어에서 사용할 수없는 경우 액세스 위반이 아니라 이상한 동작을 유발할 수 있습니다.

C ++ 예외를 던지거나 SEH 예외를 올리면 구조화 된 예외 핸들러가 버퍼 오버런에 의해 쓰레기를 버렸을 수도 있습니다.

다른 팁

잠재적으로 나는 당신이 메모리에 글을 쓰려고 할 때마다 이것이 가능한 결과라고 생각할 것입니다. 객체를 삭제 한 다음 객체를 사용하거나 사용하거나 너무 작은 버퍼에 문자열을 작성하는 선을 따라 할 수 있습니다.

DEP는 하드웨어 기능의 존재에 의해 영향을받습니다. 우리는 최근 앱이 오래된 기계에서 잘 운영되는 상황이 있었지만 새로운 기계에 실패 할 것입니다. 기존 서버와 새로운 서버 모두에서 DEP가 활성화되었지만 하드웨어 탐지가 더 좋거나 공격적이거나 그와 비슷한 것이기 때문에 새로운 서버에 충돌했습니다. 따라서 QA가 재생산 될 수 있지만 Dev가 할 수 없다면 동일한 하드웨어로 시도해보십시오 ... QA가 Dev보다 새롭고 더 나은 PC를 가질 수 있다는 것은 불합리한 것 같습니다 ... 나는 완전히 믿습니다!
다음은 이것에 대한 최근 경험에 대한 나의 메모입니다.Indy 9와 Windows Server 2003의 비 호환성?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top