질문
그냥 print read_flag 할때는 주소가 0x8e2로 뜨는데
pwndbg> print read_flag
$1 = {<text variable, no debug info>} 0x8e2 <read_flag>
run 하고 다시 구해보면
pwndbg> print read_flag
$2 = {<text variable, no debug info>} 0x5555555548e2 <read_flag>
이렇게뜨는데 차이가 뭔가요 그리고 둘다 주소로 해서 해봐도 /cat flag가 실행이 안되는데 다른 주소가 있는건가요
#pwnable
작성자 정보
답변
1
믕믕이부하
대표 업적 없음
해당 문제에서 제공되는 바이너리를 이용하셔야 합니다. 제공되는 c 코드를 임의로 컴파일해서 이용하시면 메모리 보호 기법이 걸리게 됩니다.
메모리 보호 기법 PIE가 걸리게 되면 프로그램이 실행될때 code 영역의 주소가 랜덤화되게 됩니다. gdb로 실행했을때는 무조건 0x555555554000+offset으로 주소가 정해지지만 실제로 바이너리를 실행했을때는 계속해서 다른 주소가 할당되서 주소가 맞지 않아 작동하지 않는 것입니다.