완료됨
uaf1.c 질문있습니다!

uaf1.c에서 free(a) 함수가 실행되면 메모리 공간이 소멸되는 걸로 배웠는데
free()함수 이후에도 왜 a의 포인터 주소는 계속 남게되는 건가요...?
초보라 잘 이해가 안 가서 질문드렸습니다.
그리고 혹시 '(char*)p' 이렇게 쓰는 문장은 어떻게 해석을 해야되나요
char*p와는 다른건가요??

#시스템해킹
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
sangjun
공부벌레

만약 malloc으로 100size의 메모리 공간주소 0x601000이 할당되면
free 시에 0x601000의 공간은 bin에 들어가게 됩니다.

하지만 a변수에는 여전히 0x601000이라는 메모리 주소를 가르키고 있으니
a=NULL을 해주지 않는 한 여전히 a=0x601000이라는 값이 남게 됩니다.

char* p는 character형 포인터 변수 p를 선언하는것이고 (char*)p
캐스팅 연산이라는 것입니다.

캐스팅 연산은 다른 변수형을 원하는 변수형으로 바꾸는 것입니다.

예를 들어서 int p=100;
이렇게 해준 것을 (char
)p는 character형 포인터 변수를 가르키는 것을 바뀌게 됩니다.

2021.06.05. 19:24