int *ptr = (int *)malloc(sizeof(int)); ptr[7] = 20;4바이트 짜린데 7칸 이상의 배열 만드는게 가능함??오류 안나고 20으로 대입까지 정확히 됨
c에서는 가능할텐데 조작하지도 않았는데 값이 바뀔 수도 있겠지. 아마 c++에서는 컴파일러 수준에서 막을 걸
포인터라는 건 결국 메모리 주소값이니까
그게 취약점이고 BOF 같은 게 그런 취약점을 이용해서 공격하는 거임. 그래서 입력 크기를 정확하게 지정해주는 입력 함수가 나온 거고.
c의 모토인 trust the programmer가 '너를 믿고 전폭적으로 지원해줄게!' 가 아니라 '너 짱 잘하고 아는 것도 많으니까 내가 굳이 이것저것 안해줘도 되지?' 이런 마인드라 그런 함정들 그냥 넘어가면 피보
는 것
상용 프로그램에서 그러면 거기서 1450라인 떨어진 곳에서 그 메모리 써서 터짐
ptr[7]의 의미는 배열 7번째를 가리키는게 아니라 그냥 *(ptr + 7)로 메모리를 가리키는 것일 뿐임.
ㄴ 그러면 할당은 4바이트인데 실제로는 4바이트 넘게도 쓸수 있다는거ㅏ???
할당은 다른 곳에서 그 메모리를 쓰지 못하게 울타리를 둘러주는 것뿐임. 예를 들자면 니가 울타리 안에 감자를 심었는데 울타리 밖 콩을 심은 곳에 감자를 한 무더기 더 뿌리는 거나 마찬가지.
당연히 울타리 안은 감자만 나겠지만 울타리 밖은 콩이랑 감자랑 섞여서 개난장판 되겠지? 그러니까 울타리 밖으로 안나가게 감자의 양을 적당히 조절해야됨