IT/Linux/Kubernetes

[IT] Windows registry DWORD와 QWORD

안녕하세요. ManVSCloud 김수현입니다.

오늘은 Windows에서 레지스트리 변경 시 볼 수 있는 DWORD(32비트)와 QWROD(64비트)에 대해 알아보는 시간을 가져볼까합니다.


DWORD & QWORD

Registry에서…

Windows 레지스트리 편집을 하다가보면 DWORD와 QWORD를 마주치게 됩니다.
DWORD와 QWORD는 눈에 보이는 그대로 32비트와 64비트의 차이인가?

그렇다면 사용하는 Server의 OS가 32bit라면 DWORD를 사용해야하고
64bit라면 QWORD를 사용해야할까?

우선 두 차이를 알기 전에 데이터 타입에 대해 알아보았습니다.
데이터 타입에는 다음과 같은 타입들이 존재합니다.


Data Type

인텔의 16비트 프로세서에서는 기본 처리 단위를 WORD로 재정의 했었습니다.
프로세서의 단위가 현재 8비트 16비트 32비트 64비트 등으로 발전하였고 16비트를 기반으로 한 기본처리 단위인 WORD가 변경이 되어야 했습니다.

과거에 DOS 같은 경우 16bit였지만 최근에는 대부분 64bit 운영체제를 사용하고 있으며 소수의 32bit 사용자들이 남아있습니다.

→ 운영체제에 16bit, 32bit, 64bit 무엇을 의미하는가?
: 이는 한 번에 전송이나 수신할 수있는 데이터의 크기를 각 16, 32, 64비트로 나누어놓은 것입니다. 32bit의 OS는 한 번에 32bit의 데이터를 처리할 수있다는 말입니다.

32bit의 환경에서는 DWORD, QWORD가 모두 4byte, 즉 32bit로 표현되며, 64bit의 환경에서는 DWORD는 32bit, QWORD는 64bit로 표현됩니다.

-. 32bit OS
DWORD : 32bit
QWORD : 32bit

-. 64bit OS
DWORD : 32bit
QWORD : 64bit


Then why not use QWORD on 64bit OS?

정확하게 말해서는 과거에 OS가 x86-32비트를 사용하였기에 대부분 시스템이 32bit에 호환되도록 만들어졌습니다.

우리가 흔히 아는 x64는 Only 64bit가 아닙니다. OS x64는 32/64비트 입니다.
32비트와 64비트 모두 호환이 가능합니다. 64bit 전용으로 IA64가 있습니다.
x64는 32비트 프로그램을 직접 실행할 수 있지만 IA64의 경우 32비트 에뮬레이션의 도움이 필요합니다.

Registry는 기본적으로 32bit 영역과 64bit 영역을 가집니다. 32bit 영역은 32bit 프로세스가 사용하며, 64bit 영역은 64bit 프로세스가 사용하게 됩니다.

DWORD
16진수 / 10진수의 값을 저장할 수 있으며, 참과 거짓을 나타낼 때는 1과 0으로 나타냅니다. WORD는 0 에서 65535 까지의 숫자를 나타낼 수 있는 16비트 수입니다.
즉 DOUBLE WORD인 DWORD는 16 X 2인 32 비트가 됩니다.
DWORD 값은 2의 32승으로 40억 가지 이상의 데이터를 표현할 수 있습니다.

QWORD
16진수 / 10진수의 값을 저장할 수 있습니다.
또한 64비트를 지원합니다, 하지만 그렇다고 하여 64비트 OS에서만 사용할 수 있을 것같지만
실제로는 32비트 윈도우에서도 사용할 수 있습니다.
64비트는 그저 데이터 길이가 64비트라는 것을 의미할 뿐입니다.

사실 이론만 들어서는 저도 대학생 때 들어본 거같긴한데 이게 무슨 소린가…합니다.

“개념 없는 직관은 맹목이요, 경험 없는 사고는 공허하다”라는 말이 있습니다.
이론도 중요하지만 직접 테스트를 해보기로 하였습니다.

TEST 1️⃣. TLS 1.2 문제로 테스트 할 때 레지스트리 중 SSL 2.0을 삭제 후 재부팅을 하면 정상적으로 올라오지 않아 강제 재부팅을 하여 올렸던 기억이 있어 SSL 2.0의 Client에 적용된 DWORD 값을 QWORD로 바꾼 뒤에 재부팅을 해보았습니다.

결과 : 정상 부팅 완료.

TEST 2️⃣. Notepad 레지스트리를 아래 그림에 있는 DWORD를 삭제하고 QWORD로 동일한 값을 준 뒤 서버 재시작 후 Notepad가 정상적으로 실행되는지 확인해보았습니다.

결과 : 정상 부팅 후 notepad 실행 시 메모장 정상 작동

TEST 3️⃣. ‘서버관리자’의 레지스트리 값을 위와 같은 방식으로 변경 후 재부팅 해보았습니다.

결과 : 드디어 원하는 결론을 얻어낼 수 있었습니다. 재부팅 후 서버가 올라온 뒤 레지스트리의 종류가 QWORD에서 DWORD로 자동 변환된 것이 존재하는 것을 발견하였습니다.

해당 결과를 보고 의심할 수 있는 점 : 소프트웨어 서버관리자는 32bit를 요구하고 있다는 점! QWORD(64bit)의 데이터 길이로 불렀는데 Kernel → User 등을 넘어오면서 64비트를 32비트로 변환한 것으로 보입니다. 위에서 설명한 “32bit의 환경에서 DWORD, QWORD가 모두 4byte, 즉 32bit로 표현”된다는 것은 OS인 windows, linux 소프트웨어뿐만이 아니라 다른 소프트웨어에서도 동일하게 적용되는 듯합니다.


Conclusion

64비트 환경에서 32비트를 실행하면 물론 사용이 가능은 하나 굳이 그럴 이유는 없습니다.
64비트에서 32비트 프로그램을 실행할 때, 또는 32비트에서 64비트 프로그램을 실행할 때 kernel32.dll, *64.dll, Ntdll.dll 등 각 비트에서 필요한 dll파일이나 코드를 불러오게 됩니다.

하지만 dll 파일이 없거나 코드에 문제가 있다면?

DWORD와 QWORD 역시 QWORD를 사용할 수는 있으나
아직 하드웨어나 소프트웨어적인 부분에서 32bit를 필요로 하는 것들이 존재하기때문에
설정을 할 때 정확히 확인 후 설정이 필요할 것으로 보입니다.

긴 글 읽어주셔서 감사합니다.

Previous Post Next Post

You Might Also Like

No Comments

Leave a Reply