반응형


C 드라이브 하위 폴더 중 Windows라는 폴더가 있고


Windows 폴더 하위에는 System32와 SysWOW64라는 프로그램이 있다.


System32


64bit Windows에서 64bit 프로세스를 위한 폴더이다.

참고) 32bit Windows에서는 32bit 프로세스를 위한 폴더이다.


SysWOW64 폴더


64bit Windows에서 32bit 프로세스를 위한 폴더로 64bit Windows에서의 32bit 프로세스는 SysWOW64 시스템 폴더의 내용을 참조하여 실행된다.

64bit Windows에는 WoW(Windows 32bit on Windows 64bit)라는 기능이 있고, 이는 64bit 플랫폼에서 32bit 프로그램 64bit 프로그램 모두 실행할 수 있도록 한다.

즉, 64bit Windows에서 32bit용으로 만들어진 애플리케이션을 실행할 때 WoW 라는 기능을 사용하여 일종의 가상 머신 환경을 제공하여 32bit 애플리케이션을 실행하는 것이다.


System32 폴더와 SysWOW64 폴더


32bit용으로 만들어진 애플리케이션을 64bit 환경에서 실행할 때 32bit 프로그램이 system32 폴더로 파일을 복사하면 Windows는 자동으로 SysWOW64 폴더로 리다이렉션하여 파일을 복사한다.

64bit windows에서 32bit용으로 만들어진 애플리케이션을 실행했을 때 32bit 프로세스가 C:\Windows\System32 폴더에 어떠한 작업을 한다고 하면 사실상 Windows에 의해 C:\Windows\SysWOW64 폴더로 리다이렉션되어 작업이 된다.

예를 들어 64bit짜리 HxD 프로그램에 32bit짜리 notepad.exe 또는 64bit짜리 notepad.exe 를 로드하면 값들이 정확히 나온다.

반면, 32bit짜리 HxD 프로그램에 32bit notepad.exe 또는 64bit notepad.exe를 로드할 때 32bit notepad.exe의 값은 정확히 나오지만, 64bit notepad.exe의 경우는 제대로 값들이 나오지 않는다.

그 이유는 32bit HxD 프로그램에서 64bit notepad.exe를 작업할 때 제대로 인식되지 못하고 system32에서 SysWOW64로 리다이렉션 되었기 때문에 64bit notepad.exe를 로드했더라도 32bit notepad.exe와 offset 값이 같게 나온다.

즉, 32bit 프로그램(주체)에서 64bit 프로그램을 로드할 때는 주체가 32bit 프로그램이기 때문에 WOW64 File System Redirection에 의해 system32에서 SysWOW64로 리다이렉션 되어서 작업이 진행되기 때문에 같은 64bit notepad.exe를 로드한다고 하더라도 64bit 프로그램에서 로드하느냐 32bit 프로그램에서 로드하느냐에 따라 offset 값이 달라진다.


32bit 프로그램(or 환경)에서 64bit 프로그램을 실행했을 때 SysWOW64로 리다이렉션되지 않고 System32 폴더에 접근하여 작업을 진행하고 싶다면 Wow64EnableWow64FsRedirection API를 사용하여 리다이렉트 기능을 끄고 강제로 접근한다.


참고 URL
https://jeongminhee99.tistory.com/101

https://pung77.tistory.com/23

반응형

+ Recent posts