본문 바로가기
reversing

64비트

by 코끼리_땃쥐 2022. 7. 15.
반응형

Win 32 API

64비트 응용 프로그램을 만들 때 기존 Win32 API를 거의 그대로 사용합니다.

Win32 API를 따로 제공하는 것이 아닙니다.

기존 개발자 입장에서는 새로운 API를 추가로 익혀야 하는 부담이 없다는 것이 큰 매력입니다. 이와 같은 여러가지 배려를 통하여 기존 32비트용 소스코드를 비교적 쉽게 64비트용으로 포팅할 수 있게 되었습니다.

 

 

WOW64

64비트 Windows에서는 32비트 응용 프로그램과 64비트 응용프로그램이 모두 실행될 수 있습니다. 64비트 응용 프로그램은 Kernel32.dll(64비트)과  ntdll.dll(64비트)을 로딩 합니다. 반면 32비트 응용 프로그램은 kernel32.dll(32비트)과 ntdll.dll(32비트)을 로딩 하는데, 중간에서 'WOW64'가 ntdll.dll(32비트)의 요청(API 호출)을 ntdll.dll(64비트)로 리다이렉션(redirection)해줍니다.

즉 64비트 windows에는 32비트 windows의 시스템 환경을 준비해놓고 32비트 응용 프로그램이 실행될 때 이를 제공합니다. 그리고 중간에서 wow64가 64비트 환경으로 변환시켜주는 것입니다.

 

폴더구조

64비트 환경에서도 시스템 폴더의 이름은 'System32' 입니다.

그리고 32비트 하위 호환을 위하여 'sysWOW64' 폴더를 따로 제공합니다.

System32 폴더에는 64비트 시스템 파일들이 존재하고, SysWOW64폴더에는 32비트용으로 제작된 시스템 파일들이 존재합니다. 중요 시스템 파일들이 각각 64비트와 32비트용으로 빌드되어 제공됩니다.

 

재미있는 사실은 64비트 프로그램에서 GetSystemDirectory() API를 이용해서 시스템 폴더를 찾으면 System32 폴더가 정상적으로 리턴됩니다. 32비트 프로그램에서 GetSystemDirectory()를 호출하면 폴더이름은 'System32'로 리턴되고, 실제 폴더의 내용은 'SysWOW64'와 같습니다. WOW64가 중간에서 API호출을 가로채서 조작한 결과입니다. 이로 인해 32비트 프로그램은 별다른 문제 없이 잘 동작할 수 있는 것 입니다.

반응형

'reversing' 카테고리의 다른 글

ASLR 이란?  (1) 2022.07.25
PE32+  (0) 2022.07.18
DLL 이젝션이란  (0) 2022.06.13
DLL 인젝션이란  (0) 2022.06.13
테크 맵  (0) 2022.05.26

댓글