완료됨
유저 영역과 커널 영역에 관해 궁금해요
안녕하세요! 강의에서 아래 문단을 보다가 궁금한 점이 생겨 질문드려요.
32비트 바이너리는 유저영역이 0x0 - 0xBFFFFFFF
, 커널영역이 0xC0000000 - 0xFFFFFFFF
이고,
64비트 바이너리는 유저영역이 0x0 - 0x7FFF...
, 커널영역이 0xFFFF8000... - 0xFFFFFFFF...
이다.
유저영역엔 응용프로그램의 데이터가, 커널영역엔 커널의 데이터가 저장된다.
프로세서가 유저모드에 있으면 프로세스의 유저영역에만 접근이 가능하다. 반면, 커널모드라면 유저영역과 커널영역 모두에 접근이 가능하다.
64비트 바이너리를 디버깅할때 vmmap으로 메모리 맵을 확인해 보면, 유저영역과 커널영역의 구분이 명확하고 커널영역엔 읽기나 쓰기가 아예 불가한 반면, 32비트 바이너리는 라이브러리나 스택이 커널영역의 주소에 올라오더라구요. 그리고 그 데이터를 읽거나 쓸수도 있구요. (쓰기권한이 있다면)
어떻게 유저모드에서 커널영역에 접근이 가능한지 궁금해요!
#시스템해킹
#서론
작성자 정보
답변
1
hhro?
강의 수강: 50
유저/커널의 주소 영역은 실행하는 바이너리의 아키텍처가 아니라, 운영체제의 아키텍처에 따라 달라집니다.
64비트 아키텍처에서 32비트 바이너리를 실행한다해도, 커널은 0xFFFF8000... - 0xFFFFFFFF...
에 위치합니다.
따라서, 64비트 운영체제에서는 0xC0000000 - 0xFFFFFFFF
의 주소에 프로세스의 스택이나 라이브러리가 위치해도 문제될 것이 없습니다.