struct W
{
BYTE a,b,c[10000], d;
}
int main()
{
W w = nullptr;
w->d = 0; // ??
}
메모리 주소 0에 접근해서 처리하는 루틴은 os가 감지해서 죽일수 있을것같은데
위 같이 w->d는 decimal로 0+10002잖아?
이럼 0접근하는지도 알 수 없고 임의데이터 조작할 여지도 있으니까
걍 OS차원에서 막아버리는건가
아님 Exception 안던지고 그냥 흘러넘길 수도 있는데 디버그 차원에서 뻗게 만드는건가
{
BYTE a,b,c[10000], d;
}
int main()
{
W w = nullptr;
w->d = 0; // ??
}
메모리 주소 0에 접근해서 처리하는 루틴은 os가 감지해서 죽일수 있을것같은데
위 같이 w->d는 decimal로 0+10002잖아?
이럼 0접근하는지도 알 수 없고 임의데이터 조작할 여지도 있으니까
걍 OS차원에서 막아버리는건가
아님 Exception 안던지고 그냥 흘러넘길 수도 있는데 디버그 차원에서 뻗게 만드는건가
W* w = nullptr; 말하는거면 UB임 결과는 아무도 모름
운좋게 할당된 주소 접근하면 될수도 있고 아니면 터질수도 있고 뭘 읽을지부터 성공할지까지 아무것도 모름
아주 대충 설명하자면 가상 메모리 주소의 시작 부분이 대개는 접근 불가가 되도록 OS에서 설정하고 메모리 참조를 시도할 경우 CPU에서 OS의 오류 핸들러를 호출함.
0번지쪽에 읽기쓰기실행 다 불가능한 페이지 할당해서 핸들링할거같은데
어차피 오류나는데 굳이 확인할 필요가?
실제로 00000000에 메모리할당만 성공하면 에러안남