살아가는 이야기

Windows 운영체제의 System32 및 SysWOW64 관계 본문

살아가는 이야기

Windows 운영체제의 System32 및 SysWOW64 관계

우균 2021. 10. 7. 05:36

PowerShell을 이용하여 Windows\System32 폴더에서 우연히 nano를 이용하여 텍스트 파일―hello.c(?)―을 만든 적이 있다. 그런데 성공적으로 저장하고 나서 해당 파일을 그 폴더 내에서 찾을 수 없다는 것을 알게 되었다. 이상하여 다시 nano를 실행해 보면 hello.c 내용은 그대로 적혀 있는 것을 알 수 있었다. 도대체 hello.c 파일은 어디에 저장되어 있는 것일까?

검색해 보니 해당 파일은 Windows\SysWOW64에 저장되어 있었다. 이유를 알 수 없어서 구글링해 보니 이는 윈도 시스템의 API 때문인 것으로 판명되었다. 윈도 시스템에는 GetSystemDirectory()라는 API가 있는데, 이 API를 이용하여 윈도 시스템 파일을 접근할 때, 시스템이 알아서 적합한 폴더를 반환한다. 그런데 왜 이 폴더가 System32가 아닌 SysWOW64로 바뀐 것일까?

우스운 것은 32bit Windows용 시스템 파일들은 SysWOW64에 저장되고 64bit Windows용 파일들은 System32에 저장된다는 것이다. 이유가 프로그램 포팅 때문인데, 32bit 윈도 개발자들이 GetSystemDirectory() API를 이용하는 대신 Windows\System32를 하드코딩하였고 이를 64bit 윈도로 포팅할 때 그대로 사용되어 System32 폴더가 64bit용 시스템 파일을 저장하는 폴더가 되어 버린 것이다. 대신 64bit 윈도에서 사용할 시스템 디렉토리는 새로 만들어 SysWOW64로 사용하게 된 것이다.

아마 nano는 하드코딩하는 대신 GetSystemDirectory() API를 이용하여 제대로 시스템 폴더 위치를 찾았던 것 같다. 그래서 64bit 윈도에서 새로 만들어진 SysWOW64에 해당 파일이 생긴 것으로 추정된다.

비슷한 상황이 16bit 윈도 시스템 폴더인 Windows\System과 32bit 윈도 시스템 폴더인 Windows\System32 사이에도 발생했다고 하니 우습다. 자세한 내용은 아래 글(영문)을 참고하기 바란다.

https://www.ibm.com/support/pages/why-do-64-bit-dlls-go-system32-and-32-bit-dlls-syswow64-64-bit-windows
Comments