![Unison OS는 참조된 널 포인터, 범위를 벗어난 인덱스 액세스(쓰기 아님) 및 초기화되지 않은 변수의 사용을 어떻게 처리합니까?](https://linux55.com/image/193490/Unison%20OS%EB%8A%94%20%EC%B0%B8%EC%A1%B0%EB%90%9C%20%EB%84%90%20%ED%8F%AC%EC%9D%B8%ED%84%B0%2C%20%EB%B2%94%EC%9C%84%EB%A5%BC%20%EB%B2%97%EC%96%B4%EB%82%9C%20%EC%9D%B8%EB%8D%B1%EC%8A%A4%20%EC%95%A1%EC%84%B8%EC%8A%A4(%EC%93%B0%EA%B8%B0%20%EC%95%84%EB%8B%98)%20%EB%B0%8F%20%EC%B4%88%EA%B8%B0%ED%99%94%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%80%20%EB%B3%80%EC%88%98%EC%9D%98%20%EC%82%AC%EC%9A%A9%EC%9D%84%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%B2%98%EB%A6%AC%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
특정 특정 C 언어 소스 코드가 다음에서 실행되는지 확인하려고 합니다.통합 운영 체제충돌을 일으킬 수 있는 경로와 경로는 무엇인지 생각해 볼 수 있습니다. 코드의 특정 부분에서는 때때로 널 포인터를 역참조하고, 범위를 벗어난 배열 인덱스에 액세스하지만 쓰지 않고, 초기화되지 않은 변수를 사용하려고 시도합니다.
C에서는 동작이 정의되지 않아 예측할 수 없지만, 내가 읽은 다른 토론에 따르면 운영 체제 및/또는 CPU는 이러한 경우 기본 동작을 갖습니다.
문제의 코드를 소유하고 있지 않으며 수정하고 싶지 않습니다. 나는 단지 이러한 것(그리고 어떤 것)이 프로그램 충돌을 일으킬 합리적인 가능성이 있는지 높은 수준에서 이해하고 싶습니다.
답변1
저는 여러분의 일반적인 상황을 다루려고 노력할 것입니다. 저는 Unison OS의 전문가는 아닙니다.
널 포인터를 역참조해 보세요
프로그램이 NULL 포인터를 역참조하는 경우 프로세스는 SIGSEGV
.
범위를 벗어난 배열 인덱스에 액세스하지만 쓸 수는 없습니다.
프로세스가 결과 주소를 읽을 수 있는지 여부에 따라 다릅니다. 결과 주소가 읽기에 "유효"하다면 값을 읽으려고 하면 주어진 주소에서 적절한 바이트 수를 얻게 됩니다. 주소가 더 이상 유효하지 않은 지점까지 배열 끝에서 "충분히" 벗어난 경우 프로세스는 SIGSEGV
.
초기화되지 않은 변수 사용
메모리에서 바이트를 읽으면 해당 바이트에 마지막으로 저장된 값이 반환됩니다. 프로그램에 초기화되지 않은 스택 할당 변수가 있고 해당 변수를 읽으려고 하면 해당 바이트가 마지막으로 기록된 내용을 가져옵니다.