본문 바로가기

카테고리 없음

PE패치 dll 로딩 의문점

PE 패치 시에 IDT를 섹션의 빈 부분으로 옮겨서 늘렸는데

 

계산 방법이 virtual size와 size of raw data의 차이에서 virtual size에 매핑되지 않는 부분에 IDT를 옮겼다.

 

내가 이해한 바로는 file의 섹션에서 virtual size만큼만 읽어서 메모리에 올릴것이라고 생각했다.

 

이 점이 궁금해서 디버거와 PE viewer, HXD를 이용해서 실험해봤다.

 

virtual size가 188E 이고 Size of Raw Data가 1A00인 파일을 가지고 매핑되지 않은 부분은 0으로 채워져 있었는데 Hxd로 0이 아닌 다른 값들로 채워보았다.

 

x64dbg로 디버깅 해보니 내가 채운 값들이 들어 있고 section alignment가 1000이었는데 size of raw data보다 큰 부분들은 0으로 채워져 있고 virtual size와 size of raw data가 매칭되지 않는 부분은 내가 채운 값들로 채워져 있었다.

 

이로 인해 이해한 것.

 

파일 섹션에서 virtual size만큼 읽어서 올리는 것이 아니다.

 

section alignment보다 size of raw data가 작은 경우 size of raw data 만큼 다 메모리에 올려버린다.