내가 PE 파일의 헤더를 하나하나 분석을 해보고 있거든
VA = 이미지 로드 주소 + RVA 라고 하길래 이미지 로드 주소가 어디에 저장되는지 봤더니 Image Base 더라?
Image Base는 EXE의 경우 0x00400000를 기준 잡고 파일 데이터가 로드된다고 하는데
한 프로세스에 대해서 그렇게 올라가면 맞겠지만 문제는 윈도우즈 상에서는 현재 여러 프로세스들이 메모리에 매핑되잖아?
Image Base는 고정된 값이고 VA = Image Base + RVA가 맞다면, 그럴 땐 모든 프로세스가 같은 VA에서 로딩될 수 있다는건데 그것부터가 애초에 말이 안된다고 생각함.
절대적인 측면에서 뭐 메모리에서 실제로 어떤 번지에 로드된다는건지 존나 이해를 못하겠음.
내가 운영체제에서 공부했을 때는 무슨 해시 테이블 참조해서 매핑하는 방식으로 한다 했는데 그거랑 아예 다른건가?
프로세스마다 가상메모리 따로 가지니까 주소값이 같아도 애초에 겹칠수 없음
감사합니다ㅋㅋ
"0x00400000"는 물리 메모리의 주소가 아니라 virtual address임. 윈도우 상의 모든 프로세스는 자기 자신만의 주소 공간을 지니고 있으며, 이 주소 공간이 물리 메모리와 매핑되어 있음. 따라서 "0x00400000"로 해도 안겹침
오..... Riey님 말과 너 댓글 보니까 좀 이해될 것 같기도 하다. 애초에 윈도즈의 페이징 매핑 쪽으로 깊숙히 공부한 다음에 생각했어야 할 문제였는데 내가 너무 이상하게 생각했었나봐 ㅋㅋ