stdout <-> _IO_2_1_stdout_
- 그런데 찾아보면 stdout이라는 전역 변수 자체가 존재한다는 것을 알 수 있다.
- 일단 확실한 건 stdout이라는 녀석은
FILE *
에 해당하고, _IO_2_1_stdout_
은 실제 FILE *
을 가지고 있다.
- stdout은 이
_IO_2_1_stdout_
을 가리키고 있다고 보면 된다.
- 메모리에 매핑된 위치?
- stdout의 경우 data section에 존재함.
- _IO_2_1_stdout_
은 libc 내부에 존재함.
- 실제로 stdout이
_IO_2_1_stdout_
의 주소를 값으로 가진다.
- 하나 더 TMI인 부분은 vmmap을 보면 write가 가능한 영역에 stdout이 속한다는 것도 알고 있으면 좋다.
- 요거는 stdio.c에서 가져온 부분.
- 그래서 NO_PIE인 바이너리의 경우 stdout을 통해서 libc의 주소를 leak할 수 있다..? 가 결론인가..?