2010-03-17 3 views
0

Visual Studio 내에서 완벽하게 실행되는 C# Windows Forms 응용 프로그램이 있지만 .exe에서 배포 및 실행될 때 충돌이 발생합니다. 버퍼 오버런 오류로 인해 충돌이 발생합니다 ...이 코드가 내 코드에서이 오류가 발생하지 않는다는 사실이 분명합니다. 대신, 윈도우는 일종의 버퍼 오버런을 감지하고 외부에서 응용 프로그램을 종료해야합니다. 나는 그것을 일으키는 특정 코드 행이 있다고 생각하지 않는다. 간헐적으로 일어난다.Visual Studio에서 배포 된 (.exe) 버전의 버퍼 오버런으로 인해 C# 응용 프로그램이 충돌 함

버퍼 오버런 오류의 원인은 무엇이고 왜 배포 된 응용 프로그램에서만 발생하며 Visual Studio에서는 실행되지 않는지에 대한 의견이 있습니까? 사전에

감사합니다, 벤

+0

다른 PC에서 사용해 보셨나요? – Luiscencio

+0

정확한 오류를 제공해 주시겠습니까? –

+0

감사합니다. 예, 여러 대의 PC에서 발생합니다. 방금 아래 오류에 오류를 게시했습니다. – Ben

답변

0

는 좀 더 구체적으로해야합니다.

일반적으로 관리되지 않는 버그가 있습니다.

+0

정확한 오류 : MyApplication.exe에서 프로그램의 내부 상태가 손상된 버퍼 오버런이 발생했습니다. Break를 눌러 프로그램을 디버그하거나 Continue를 눌러 프로그램을 종료하십시오. 코드를 제공하기가 어렵습니다 ... 어디에서 충돌하는지 확인할 수 없습니다! 거의 모든 코드 행에 로깅 문을 추가하는 중이지만 지금까지는 아직 패턴을 발견하지 못했습니다. – Ben

+0

오류 상태로 "브레이크를 눌러 프로그램을 디버그 하시겠습니까?" Visual Studio에서 디버거에 응용 프로그램을 연결하려고하지 마십시오 (물론 응용 프로그램이 릴리스 모드가 아닌 디버그 모드로 실행되어야합니다). 안전하지 않은 코드 블록을 사용하고 있습니까? –

1

이것은 잘못된 비 관리 C/C++ 코드로 인해 발생하는 오류입니다. 관리되지 않는 CRT는 코드가 스택 프레임에 쿠키를 저장하여 스택에있는 배열의 끝을 오버런하지 않는지 확인합니다. 함수가 반환되면 쿠키가 아직 있는지 확인합니다. 그렇지 않은 경우, 그것은 어떤 종류의 악성 코드를 가정하거나 C/C++ 코드의 버그로 인해 스택 프레임이 파괴되었습니다. 공정한 가정은 대부분의 바이러스 감염이 90 년대 후반에 어떻게 작용했는지입니다.

확률은 C/C++ 코드의 버그 인 약 99.999 %이며 컴퓨터가 공격 받고있는 0.001 %입니다. C/C++ 코드를 찾아 버그를 수정하기 위해 작성한 프로그래머를 확보해야합니다. 찾을 곳이 없다면 ActiveX 컨트롤이나 COM 서버를 의심하여 ​​시작하십시오. 그리고 실행중인 버전의 프로그램에 비 관리 모드의 디버거를 연결하여로드 한 DLL을 확인하십시오. Debug + Windows + Modules을 사용하고 모든 DLL을 고려할 수 있는지 확인하십시오.

아, 소스를 현지화하는 데 크래시 세부 정보가 도움이되는지 확인해야합니다.