완료됨
uaf1.c 질문있습니다!
uaf1.c에서 free(a) 함수가 실행되면 메모리 공간이 소멸되는 걸로 배웠는데
free()함수 이후에도 왜 a의 포인터 주소는 계속 남게되는 건가요...?
초보라 잘 이해가 안 가서 질문드렸습니다.
그리고 혹시 '(char*)p' 이렇게 쓰는 문장은 어떻게 해석을 해야되나요
char*p와는 다른건가요??
#시스템해킹
작성자 정보
답변
1
sangjun
공부벌레
만약 malloc으로 100
size의 메모리 공간주소 0x601000이 할당되면
free 시에 0x601000의 공간은 bin에 들어가게 됩니다.
하지만 a변수에는 여전히 0x601000
이라는 메모리 주소를 가르키고 있으니
a=NULL
을 해주지 않는 한 여전히 a=0x601000이라는 값이 남게 됩니다.
char* p는 character형 포인터 변수 p
를 선언하는것이고 (char*)p
는
캐스팅 연산이라는 것입니다.
캐스팅 연산은 다른 변수형을 원하는 변수형으로 바꾸는 것입니다.
예를 들어서 int p=100;
이렇게 해준 것을 (char)p는 character형 포인터 변수를 가르키는 것을 바뀌게 됩니다.