부팅 시 0xc000000ba 애플리케이션 오류가 발생하는 이유는 무엇인가요?
이 문제에는 원인이 너무 많고 Microsoft의 기술 문서에는 자세한 설명이 없습니다. 일반적인 상황은 다음과 같습니다.
아래 설명을 참조하세요:
저도 이 문제에 직면했습니다! 일부 프로그램을 실행할 때 가끔 메모리 오류 메시지가 나타났다가 프로그램이 종료되는 경우가 있습니다.
"0x" 명령어가 참조하는 "0x" 메모리입니다. 이 메모리는 "읽을" 수 없습니다.
"0x" 명령이 참조하는 "0x" 메모리는 "쓰기"할 수 없습니다.
비슷한 실패를 경험한 적이 있나요? (0x 이후의 내용은 다를 수 있습니다.)
일반적으로 이러한 현상은 여러 가지 이유로 발생합니다. 하나는 하드웨어, 즉 메모리 문제이고, 다른 하나는 문제가 많은 소프트웨어입니다.
1. Microsoft IE 버퍼 오버플로 취약점으로 인해 발생
2. 메모리 사용 또는 가상 메모리 주소 충돌로 인해 발생
프로그램을 실행하려면 다음이 필요합니다. 프로그램에 특정 메모리 주소를 할당합니다. 프로그램이 종료되면 새 프로그램이 사용할 공간을 해제합니다. Win은 멀티 태스킹 시스템입니다.
때때로 이전 프로그램보다 먼저 새 작업이 시작됩니다. 종료
동시에 작업을 실행하려면 얼마나 많은 메모리나 가상 메모리가 필요한가요? win이 이 문제를 잘 해결하지 못해 이런 오류가 자주 발생하는 것 같습니다. 일반적으로 대규모 소프트웨어나 멀티미디어를 실행한 후에 발생합니다.
3. 이 문제는 열악한 메모리 모듈에서도 발생합니다.
일반적으로 메모리 문제가 발생할 가능성은 크지 않습니다. 메모리 모듈이 손상되고, 메모리 품질에 문제가 있으며, 2가지 다른 브랜드의 메모리를 서로 다른 용량으로 혼합하면 비호환성이 발생할 수 있습니다. 동시에, 특히 오버클러킹 후에는 열 방출 문제에 주의를 기울여야 합니다. MemTest
소프트웨어를 사용하여 메모리를 테스트할 수 있습니다. 이는 메모리의 안정성을 철저하게 감지할 수 있습니다.
듀얼 메모리와 다른 브랜드의 메모리 모듈이 혼합되어 있거나 메모리를 중고로 구입했는데 이런 문제가 발생하는 경우 메모리나 다른 하드웨어에 문제가 있는지 확인해야 합니다. .
4. Microsoft WINDOWS 시스템의 취약점
Windows에서는 프로그램이 이 주소에 액세스하려고 시도할 경우 메모리 주소 0X00000000~0X0000ffff를 지정합니다. 이는 오류로 간주됩니다. c/c로 작성된 프로그램은 일반적으로 엄격한 오류 검사를 수행하지 않습니다. malloc을 사용하여 메모리를 할당하고 할당에 사용할 수 있는 주소 공간이 충분하지 않으면 널 포인터가 반환됩니다. 그러나 코드에서는 이런 오류를 확인하지 않고 주소 할당이 성공했다고 생각하여 0X00000000이라는 주소에 접근하게 되므로 메모리 접근 위반이 발생하고 프로세스가 종료된다.
ASCII 문자로 구성된 pif 파일을 채울 때 다음 상황이 발생합니다:
불법 pif 파일(ascii 문자 \'x\'로 채워짐)은 369바이트 이상이어야 합니다 , 시스템은 그래야만 합법적인 pif 파일로 간주되고, pif 아이콘과 함께 표시되며, 그래야만 프로그램,
글꼴, 메모리, 화면과 같은 콘텐츠가 있게 됩니다." 그리고 pif가 아닌 파일의 크기일 경우에만 속성의 "프로그램" 페이지를 볼 때 369바이트일 때 "프로그램"을 볼 때에도 프로그램 오류가 발생하지 않습니다. " 369바이트보다 큰 불법 pif 파일 속성 페이지에서 Explorer는 오류 메시지를 표시합니다: \'***\' 명령어가 참조하는 \'***\' 메모리. 이 메모리는 \'읽기\'할 수 없습니다. 문제는 pif 파일의 16진수 주소에 있습니다:
0x00000181[0x87]0x00000182[0x01] 및
0x00000231[0xC3]0x00000232[0x02]
합법적인 pif 파일이라 할지라도 이 네 곳 중 하나라도 변경되면 프로그램 오류가 발생합니다.
0x00000181과 0x00000182의 값이 [0xFF][0xFF]로 변경되는 한, 다른 주소를 변경해도 오류가 발생하지 않습니다
.
5. Apache 서비스가 올바르게 설치 및 시작되지 않을 수 있습니다. 서비스에서
OracleOraHomeXXHTTPServer를 중지하도록 변경하세요.
6. 메모리 할당 실패
프로그램이 데이터를 저장하기 위해 메모리가 필요한 경우 운영 체제에서 제공하는 "함수 함수"를 호출하여 적용해야 합니다. 메모리 할당이 성공하면 함수가 할당됩니다. 새로 할당된 메모리 영역 주소가 애플리케이션에 반환되고, 애플리케이션은 이 주소를 통해 이 메모리를 사용할 수 있습니다. 이것이 "동적 메모리 할당"이며, 프로그래밍에서 메모리 주소는 "포인터"이기도 합니다.
메모리는 항상 사용 가능하고 무한하지 않으며 때로는 메모리 할당이 실패할 수도 있습니다. 할당이 실패하면 시스템 함수는 0 값을 반환합니다. 이때 반환 값 "0"은 더 이상 새로 활성화된 포인터를 나타내는 것이 아니라 시스템이 응용 프로그램에 오류가 있음을 알리는 알림을 나타냅니다. 발생했습니다. 응용 프로그램으로서 메모리를 적용할 때마다 반환 값이 0인지 확인해야 합니다. 그렇다면 오류가 발생했음을 의미하며 이를 저장하기 위해 몇 가지 조치를 취해야 합니다. 이렇게 하면 프로그램의 "견고함"이 향상됩니다.
애플리케이션이 이 오류를 확인하지 않으면 이 값이 "생각하는 관성"에 따라 할당된 사용 가능한 포인터라고 생각하고 후속 실행에서 이 메모리를 계속 사용하게 됩니다. 주소 0의 실제 메모리 영역은 컴퓨터 시스템에서 가장 중요한 "인터럽트 설명자 테이블"을 저장하며 응용프로그램에서는 이를 절대 사용할 수 없습니다. 보호 메커니즘이 없는 운영 체제(예: DOS)에서 이 주소에 데이터를 쓰면 즉시 충돌이 발생합니다. Windows와 같은 강력한 운영 체제에서는 이 작업이 시스템의 보호 메커니즘에 의해 즉시 캡처되며 그 결과는 다음과 같습니다. 운영 체제는 오류가 확산되는 것을 방지하기 위해 잘못된 응용 프로그램을 강제로 닫습니다. 이때, 위에서 언급한 "메모리 쓰기" 오류가 나타나며 참조된 메모리 주소가 "0x00000000"임을 지적합니다.
메모리 할당 실패에는 여러 가지 이유가 있습니다. 메모리 부족, 시스템 기능 버전 불일치 등이 영향을 미칠 수 있습니다. 따라서 이러한 종류의 할당 실패는 운영 체제를 오랫동안 사용한 후, 다양한 응용 프로그램(실수로 "설치"된 바이러스 프로그램 포함)을 설치한 후, 많은 수의 시스템 매개 변수 및 시스템 파일이 변경되었습니다.
7. 자체 버그로 인해 애플리케이션이 비정상적인 메모리 포인터를 참조합니다.
동적 할당을 사용하는 애플리케이션에서는 때때로 다음과 같은 상황이 발생합니다. "사용 가능해야 함" 메모리 블록을 작성했지만 어떤 이유로 예상되는 사용 가능한 포인터가 만료되었습니다. 운영 체제에 할당을 요청하는 것을 "잊었"거나 프로그램 자체가 "주의를 기울이지" 않은 채 어느 시점에서 이 메모리를 로그오프했을 수도 있습니다. 등록되지 않은 메모리는 시스템에 의해 회수되며 해당 액세스 권한은 더 이상 응용 프로그램에 속하지 않습니다. 따라서 읽기 및 쓰기 작업도 "불법"을 시도하는 프로그램의 유일한 운명은 종료됩니다. 작업에 의해 모든 리소스가 회수됩니다. 컴퓨터 세계의 법률은 여전히 인간의 법률보다 훨씬 더 효과적이고 엄격합니다!
이와 같은 상황은 모두 프로그램 자체의 버그이며 특정 작업 순서에서 오류를 재현할 수 있는 경우가 많습니다. 유효하지 않은 포인터는 항상 0이 아니므로 오류 메시지의 메모리 주소는 반드시 "0x00000000"이 아니라 다른 임의의 숫자입니다.
------------------------------- ----- ---------------
시스템에 위에서 언급한 오류 메시지가 자주 표시되는 경우 다음 제안 사항이 도움이 될 수 있습니다.
1. 시스템에 트로이 목마나 바이러스가 있는지 확인하십시오. 이러한 프로그램은 시스템을 제어하기 위해 무책임하게 시스템을 수정하여 운영 체제에 이상을 일으키는 경우가 많습니다. 항상 정보 보안 인식을 강화해야 하며, 출처를 알 수 없는 실행 프로그램에 대해 절대 호기심을 가져서는 안 됩니다.
2. 운영 체제를 업데이트하고 운영 체제 설치 프로그램이 올바른 버전의 시스템 파일을 다시 복사하도록 하고 시스템 매개변수를 수정합니다. 가끔 운영체제 자체에 버그가 있을 수 있으니 반드시 정식 업그레이드 프로그램을 설치하시기 바랍니다.
3. 새로운 버전의 애플리케이션을 사용해 보세요.
4. Winnt\\System32\\Wbem\\Repository 폴더에서 파일을 삭제한 다음 다시 만듭니다.
바탕 화면에서 내 컴퓨터를 마우스 오른쪽 버튼으로 클릭하고 관리를 클릭합니다.
서비스 및 응용 프로그램에서 서비스를 클릭한 다음 Windows Management Instrumentation 서비스를 닫고 중지합니다.
Winnt\\System32\\Wbem\\Repository
폴더의 모든 파일을 삭제합니다. (이러한 파일을 삭제하기 전에 백업 복사본을 만드십시오.)
서비스 및 응용 프로그램을 열고 서비스를 클릭한 다음 Windows Management Instrumentation 서비스를 열고 시작합니다.
서비스가 다시 시작되면 다음 레지스트리 키에 제공된 정보를 기반으로 이러한 파일이 다시 생성됩니다.
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\WBEM\\CIMOM\\Autorecover
MOF
/viewthread.php?tid=627383amp; fpage=1amp;highlight=
몇 가지 예를 통해 분석해 보겠습니다.
예 1 : IE 브라우저를 열거나 몇 분 내에 "0x70dcf39f" 명령이 참조하는 "0x00000000" 메모리가 나타납니다. 이 메모리는 "읽을" 수 없습니다. 프로그램을 종료하려면 "확인" 메시지 상자를 클릭하세요. "확인"을 클릭하면 프롬프트 메시지를 닫은 후 "내부 오류가 발생하여 사용 중인 창 중 하나가 곧 닫히려고 합니다"라는 메시지 상자가 나타납니다. 브라우저 장치도 꺼져 있습니다.
해결책: IE 브라우저를 수리 또는 업그레이드하고 동시에 패치를 적용하십시오. 제가 본 복구 방법 중 하나는 Win2000 자체 업그레이드, 즉 Win2000에서 Win2000으로 업그레이드하는 것입니다. 실제로 이 방법은 시스템을 초기 상태로 복원하는 것입니다. 예를 들어 IE가 6.0으로 업그레이드되면 업그레이드 후 IE5.0으로 대체됩니다.
예 2: Windows XP에서 CD에 있는 "AutoRun.exe" 파일을 두 번 클릭하면 "0x77f745cc" 명령이 참조하는 "0x00000078" 메모리가 표시됩니다. 메모리에 '쓰기'할 수 없습니다. 프로그램을 종료하려면 '확인'을 클릭하세요. 하지만 Windows 98에서는 정상적으로 실행됩니다.
해결책: 이는 시스템 호환성 문제일 수 있습니다. winXP 시스템의 경우 "AutoRun.exe" 파일, 속성, 호환성을 마우스 오른쪽 버튼으로 클릭하고 "호환 모드에서 이 프로그램 실행" 항목을 선택한 다음 선택하십시오. "윈도우
98/Me". win2000이 SP로 패치된 경우 시작하고 실행하고 regsvr32
c:\\winnt\\apppatch\\slayerui.dll을 입력하세요. 마우스 오른쪽 버튼을 클릭하면 속성 및 호환성 옵션도 나타납니다.
예시 3: RealOne
Gold를 닫을 때 오류가 발생했습니다. 이전에는 정상적으로 사용되었으나 최근에는 "0xffffffff" 명령이 참조하는 "0xffffffff" 메모리가 매번 나타납니다. 그것은 닫혔습니다. 메모리를 "읽을" 수 없습니다
.
해결 방법: 사용된 입력 방식이 Microsoft Pinyin 입력 방식 2003이고 입력 도구 모음이 숨겨져 있어(숨겨지지 않으면 문제 없음) 닫기 전에 언어가 표시될 수 있으므로 RealOne을 닫을 때 이 문제가 발생합니다. 이 문제를 해결하려면 RealOne 막대를 사용하거나 다른 입력 방법을 현재 입력 방법으로 설정하세요.
예제 4: My Hero Super Jieba가 온라인 상태가 되었기 때문에 플레이할 수 없습니다. 명령에서 참조하는 "0xff000011" 메모리는 매번 "0x060692f6"(각 변경) 메시지를 표시하고 종료할 수 없습니다. . 계속하려면 확인을 클릭하세요.
해결 방법: Hero Super Jieba를 다시 설치해 보세요. 다시 설치한 후에도 문제가 지속되면 공식 웹사이트에 가서 해당 버전의 패치를 다운로드한 후 시도해 보세요. 그래도 작동하지 않으면 다른 플레이어를 사용해 보아야 합니다.
예 5: 게임 바로가기를 두 번 클릭합니다. "0x77f5cd0" 명령은 "0xffffffff" 메모리를 참조합니다.
메모리는 "읽을" 수 없으며 Client.dat입니다. 프로그램 오류 메시지가 나타납니다.
해결 방법: 그래픽 카드용 최신 드라이버를 다시 설치한 다음 DirectX9.0을 다운로드하여 설치하세요.
예 6: 친구가 메시지를 보냈는데 내 컴퓨터에 오류 메시지가 나타났습니다. "0x772b548f" 명령이 참조하는 "0x00303033" 메모리를 "쓰기"할 수 없으며 QQ가 자동으로 오프라인 상태가 되었습니다. 그리고 다시 QQ를 열어보니 그 사람이 보낸 메시지가 십여 개가 넘게 보였습니다.
해결책: 상대방이 QQ를 사용하여 특수 코드를 보내고 QQ 오류를 일으키는 버그입니다. 패치를 적용하거나 최신 버전으로 업그레이드하면 문제가 없습니다.