์ค๋์ COM(Component Object Model) ๊ฐ๋ ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
โ COM(Component Object Model) ๊ฐ๋
Microsoft์์ ๊ฐ๋ฐํ ์ํํธ์จ์ด ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ ์ธํฐํ์ด์ค ํ์ค์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ/์๋ฒ, RPC, ๋ถ์ฐ ๊ฐ์ฒด์ ๊ฐ์ ๋ถ์ฐ ์ปดํจํ ๋ชจ๋ธ์์ ์๋ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ค ์ธ์ด๋ก๋ COM ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๊ณ , ๊ทธ ๊ธฐ๋ฅ์ ์ผ๋ฐ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ COM ๊ตฌ์กฐ์ ํต์ฌ ์์
- COM ๊ฐ์ฒด
- ์ค์ ๋์ํ๋ ์ธ์คํด์ค(instance)๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ต์ํ IUnknown ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ ์ปดํฌ๋ํธ ๋จ์์ ๊ฐ์ฒด์
๋๋ค.
- IUnknown์ ๋ชจ๋ COM ์ธํฐํ์ด์ค์ ๊ธฐ๋ฐ์ด ๋๋ ์ธํฐํ์ด์ค์ด๋ฏ๋ก COM์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋ฐ๋์ ๊ตฌํํด์ผ๋๋ ์ธํฐํ์ด์ค์ ๋๋ค.
- IUnknown์ ์ต์ํ QueryInterface ๋ฉ์๋๋ฅผ ์ง์ํด์ฃผ๋ฉฐ, QueryInterface ๋ฉ์๋๋ ์๋น์ค ๊ฒ์์ ์ฌ์ฉ๋๋ ๋ฉ์๋๋ก, ์์ฒญ๋ ์ธํฐํ์ด์ค์ ํฌ์ธํฐ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํด์ค๋๋ค.
- COM ๊ฐ์ฒด๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ธํฐํ์ด์ค๋ฅผ ์ธ๋ถ์ ์ ๊ณตํฉ๋๋ค. ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋๋ก ํจ์๋ค์ ๋ฌถ์ด๋์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ์ฒด ๋ด๋ถ ๊ตฌํ์ ๋ชฐ๋ผ๋ ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- COM ๊ฐ์ฒด์ ์๋ช
์ฃผ๊ธฐ(lifetime)๋ IUnknown::AddRef์ IUnknown::Release ๋ฉ์๋๋ฅผ ํตํ ์ฐธ์กฐ ์นด์ดํธ(reference count)๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
- ์ค์ ๋์ํ๋ ์ธ์คํด์ค(instance)๋ฅผ ์๋ฏธํฉ๋๋ค.
- COM ํด๋์ค
- COM ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ ์ค๊ณ๋์
๋๋ค.
- ๋ฐ์ด๋๋ฆฌ๋ ํ๋ ์ด์์ COM ํด๋์ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- COM ํด๋์ค๋ ์ด์์ฒด์ ์ ๋ฑ๋ก๋๊ณ ๊ณ ์ ํ GUID๋ฅผ ํตํด ์๋ณ๋ฉ๋๋ค. ํด๋น GUID๋ ๋ ์ง์คํธ๋ฆฌ์์ ํด๋น ํด๋์ค๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- HKLM\Software\Classes\CLSID
- HKCU\Software\Classes\CLSID
- COM ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ ์ค๊ณ๋์
๋๋ค.
- COM ์ธํฐํ์ด์ค
- COM ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ(ํจ์)์ ์งํฉ์
๋๋ค.
- COM ์ธํฐํ์ด์ค๋ ํจ์ ํฌ์ธํฐ๋ค์ ํ
์ด๋ธ(VTable)์
๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ COM ๊ฐ์ฒด๋ฅผ ์กฐ์ํ ์ ์๋ ์ ์ผํ ํต๋ก์
๋๋ค.
- ํด๋ผ์ด์ธํธ๋ COM ๊ฐ์ฒด๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋น์ค๋ฅผ ์ฌ์ฉํ์ง๋ง ์๋น์ค ๊ตฌํ์ ๋ํด์๋ ์ ํ ์์ง ๋ชปํฉ๋๋ค. ⇒ ์บก์ํ(encapsulation)
- ํด๋ผ์ด์ธํธ๋ COM ๊ฐ์ฒด๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋น์ค๋ฅผ ์ฌ์ฉํ์ง๋ง ์๋น์ค ๊ตฌํ์ ๋ํด์๋ ์ ํ ์์ง ๋ชปํฉ๋๋ค. ⇒ ์บก์ํ(encapsulation)
- COM์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์์๊ณผ ๋คํ์ฑ ๊ฐ๋
๋ฟ๋ง ์๋๋ผ ์ ๊ทผ ์ ์ด์ ๊ฐ์ฅ ๊ฐ์ ๋ณด์ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.
- ์์(inheritance)๊ณผ ๋คํ์ฑ(polymorphism)
- ์ธํฐํ์ด์ค ๊ฐ ์์์ด ๊ฐ๋ฅํ๊ณ (inheritance), ๋ค์ํ ์ธํฐํ์ด์ค๋ฅผ ๋์ ์ผ๋ก ์ ํํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค(polymorphism).
- ์ด๋ฅผ ํตํด C++๊ณผ ๊ฐ์ ๊ฐ์ฒด์งํฅ ๊ฐ๋
์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
- ์ ๊ทผ ์ ์ด์ ๊ฐ์ฅ(impersonation)
- ๋๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ์ง ์ ํํ๊ฑฐ๋(access control), ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ฒ๋ผ ํ๋ํด์ ๊ถํ์ ์์๋ฐ๋ ๊ฐ์ฅ(impersonation)๋ ๊ฐ๋ฅํฉ๋๋ค.
- ๋๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ์ง ์ ํํ๊ฑฐ๋(access control), ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ฒ๋ผ ํ๋ํด์ ๊ถํ์ ์์๋ฐ๋ ๊ฐ์ฅ(impersonation)๋ ๊ฐ๋ฅํฉ๋๋ค.
- ์์(inheritance)๊ณผ ๋คํ์ฑ(polymorphism)
- COM ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ(ํจ์)์ ์งํฉ์
๋๋ค.
- COM ์ปดํฌ๋ํธ
- ํ๋ ์ด์์ COM ํด๋์ค์ ๊ทธ ๊ตฌํ(๊ฐ์ฒด, ์ธํฐํ์ด์ค)๋ฅผ ๋ด๊ณ ์๋ ๋ฐ์ด๋๋ฆฌ ๋ชจ๋์
๋๋ค.
- ์๋ฒ๊ฐ ๋ ๋ฆฝ ์คํ ํ์ผ๋ก ๊ตฌํ๋ EXE ํ์ผ์ผ ์๋ ์๊ณ , ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ํ๋ก์ธ์ค ๋ด๋ถ์์ ๋ก๋๋์ด ์คํ๋๋ DLL ํ์ผ์ผ ์๋ ์์ต๋๋ค.
- ํ๋ ์ด์์ COM ํด๋์ค์ ๊ทธ ๊ตฌํ(๊ฐ์ฒด, ์ธํฐํ์ด์ค)๋ฅผ ๋ด๊ณ ์๋ ๋ฐ์ด๋๋ฆฌ ๋ชจ๋์
๋๋ค.
โ COM ์๋ฒ-ํด๋ผ์ด์ธํธ ๊ฐ ํต์
ํด๋ผ์ด์ธํธ๋ ์๋ฒ ๊ฐ์ฒด๋ฅผ ์ง์ ํธ์ถํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ก์(proxy)์ ์คํ (stub) ๊ฐ์ฒด ์์ ํตํด ์๋ก ํต์ ํฉ๋๋ค.
- ํ๋ก์
- ํด๋ผ์ด์ธํธ ์ชฝ์์ ์คํ๋๋ ๊ฐ์ง ๊ฐ์ฒด
- ์๊ฒฉ ์๋ฒ ๊ฐ์ฒด์ฒ๋ผ ๋์ํ๋ ์ญํ
- ์คํ
- ์๋ฒ ์ชฝ์์ ์คํ
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฆฌ์ค๋(listener) ์ญํ
ํ๋ก์๊ฐ ํธ์ถ์ ํฌ์ฅํ์ฌ ์คํ ์๊ฒ ๋ณด๋ด๋ฉด, ์คํ ์ ๊ทธ๊ฑธ ๋ฐ์ ์ง์ง ์๋ฒ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์ค๊ณ ์ญํ ์ ํฉ๋๋ค.
COM์ ์๋ฒ-ํด๋ผ์ด์ธํธ ๊ฐ ์๊ฒฉ ํต์ ์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
๋ฉ์๋ ํธ์ถ → ์ธํฐํ์ด์ค → ๋ก์ปฌ ํ๋ก์ → ์๊ฒฉ ์คํ
→ ์ธํฐํ์ด์ค → ์๊ฒฉ ๋ฉ์๋ ํธ์ถ
โ COM ๋ฐ์ด๋๋ฆฌ ๊ตฌ์ฑ ์์
- vtbl
- ๊ฐ์ ํ ์ด๋ธ (ํจ์ ํฌ์ธํฐ ํ ์ด๋ธ)
- vtbl๋ ํด๋์ค๋น ํ๋๋ง ์กด์ฌํฉ๋๋ค.
- vptr
- vtbl์ ๋ํ ๊ฐ์ ํ ์ด๋ธ ํฌ์ธํฐ
- ๊ฐ๊ฐ์ ์ธ์คํด์คํ๋ ๊ฐ์ฒด๋ ์์ฒด์ ์ธ vptr์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- IUnknown ์ธํฐํ์ด์ค
- IUnknown์ ๋ชจ๋ COM ์ธํฐํ์ด์ค์ ๋ถ๋ชจ์ ๋๋ค.
- IUnknown::QueryInterface ๋ฉ์๋๋ฅผ ํตํด ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ๋์ ์ผ๋ก ์ฐพ์ต๋๋ค.
- IUnknown::AddRef์ IUnknown::Release ๋ฉ์๋๋ฅผ ํตํด ์๋ช (lifetime) ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
โ Class Factory (COM Factory)
ํด๋์ค ํฉํ ๋ฆฌ๋ ํน๋ณํ COM ๊ฐ์ฒด์ ๋๋ค. ์ด ๊ฐ์ฒด๋ ํน์ COM ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ COM ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ญํ ์ ํฉ๋๋ค.
ํ์ค์ ์ธ ํฉํ ๋ฆฌ๋ IClassFactory๋ผ๋ ์ธํฐํ์ด์ค๋ก ํํ๋๊ณ , ๋ค๋ฅธ ๋ชจ๋ COM ์ธํฐํ์ด์ค์ฒ๋ผ IUnknown์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค(inheritance). COM ๊ฐ์ฒด ์์ฑ ์์ฒญ์ด IClassFactory์๊ฒ ์ ๋ฌ๋๋ฉด CreateInstance ๋ฉ์๋๊ฐ ํธ์ถ๋๊ณ ์ด ๋ฉ์๋๊ฐ ๊ฐ์ฒด ์์ฑ์ ์ค์ ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
Class Factory์ COM ๊ฐ์ฒด๋ DLL์ด๋ EXE ํ์ผ์ ๋ด๊ฒจ ํจํน๋ ์ ์์ต๋๋ค.
- EXE์ธ ๊ฒฝ์ฐ
- ํด๋ผ์ด์ธํธ์๋ ๋ค๋ฅธ ์คํ ํ๊ฒฝ์์ ์๋น์ค๋ ๋ก์ปฌ/์๊ฒฉ ์๋ฒ๋ก ์คํ๋ ์ ์์ต๋๋ค.
- EXE๋ก ๋ COM ํด๋์ค๋ CoRegisterClassObject ํจ์๋ฅผ ํตํด ๋ฑ๋กํ ์ ์์ต๋๋ค.
- out-of-process server์
๋๋ค.
- out-of-process server
- ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ์คํ๋๋ COM ์๋ฒ
- EXE๋ก ๋ COM ์๋ฒ(out-of-process server)๋ ํด๋ผ์ด์ธํธ์ ๋ค๋ฅธ ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์์ ์คํ๋๊ธฐ ๋๋ฌธ์ COM ๋ฐํ์์ด IPC๋ฅผ ํตํด ํต์ ์ ์ค๊ฐ
- IPC๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ฆฐ ํธ
- out-of-process server
- DLL์ธ ๊ฒฝ์ฐ
- in-process server์ด๊ณ , ๋ณดํต ํด๋ผ์ด์ธํธ ํ๋ก์ธ์ค ์์์ ์ง์ ๋ก๋๋์ด ์คํ๋ฉ๋๋ค.
- in-process server
- ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ ํ๋ก์ธ์ค ๋ด๋ถ์์ ์คํ๋๋ COM ์๋ฒ
- ์ ํ๋ฆฌ์ผ์ด์ ์์ COM DLL์ ๋ก๋ํด์ ๋ด๋ถ์์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ
- ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ์๋ฒ๋ฅผ ๋ก๋ฉํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅธ ํธ
- in-process server
- in-process server์ด๊ณ , ๋ณดํต ํด๋ผ์ด์ธํธ ํ๋ก์ธ์ค ์์์ ์ง์ ๋ก๋๋์ด ์คํ๋ฉ๋๋ค.
โ COM ํ๊ฒฝ์์์ ํจ์ ํธ์ถ ๋ฐฉ๋ฒ
COM ํ๊ฒฝ์์๋ ํจ์๋ฅผ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํธ์ถํ ์ ์์ต๋๋ค.
- ์ ์ ํธ์ถ(Static Invocation)
- ์ปดํ์ผ ์์ ์ ๋ฉ์๋(๋ฐ ์๊ทธ๋์ฒ)๊ฐ ์ ํด์ง ์ํ๋ก ํธ์ถํ๋ ๊ฒ์
๋๋ค.
- ๋ชจ๋ ๋ฉ์๋๋ vtbl(๊ฐ์ ํจ์ ํ
์ด๋ธ)์ ํตํด ํธ์ถ๋ฉ๋๋ค: interface pointer → vptr → vtbl
- ์ปดํ์ผ ์์ ์ ๋ฉ์๋(๋ฐ ์๊ทธ๋์ฒ)๊ฐ ์ ํด์ง ์ํ๋ก ํธ์ถํ๋ ๊ฒ์
๋๋ค.
- ๋์ ํธ์ถ(Dynamic Invocation)
- ํ์
๋ผ์ด๋ธ๋ฌ๋ฆฌ(from ์ธํฐํ์ด์ค ๋ฆฌํฌ์งํ ๋ฆฌ(repository))์ ๋์คํจ์น ์ธํฐํ์ด์ค IDispatch๋ฅผ ํตํด ํธ์ถํ๋ ๊ฒ์
๋๋ค.
- IDispatch: COM์์ ๋์ ํธ์ถ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ํน๋ณํ ์ธํฐํ์ด์ค
- ๋์คํจ์น ์ธํฐํ์ด์ค์ ๋ชจ๋ ๋ฉ์๋๋ ๋์คํจ์น ์๋ณ์ dispid๋ฅผ ํตํด ํธ์ถ๋ฉ๋๋ค.
- ๋ ์ดํธ ๋ฐ์ธ๋ฉ(late binding)์ด๋ผ๊ณ ๋ ํฉ๋๋ค.
- IDispatch ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์๋๋ฅผ ๋ฐ๊ฒฌํ๊ณ ํธ์ถํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ค๋ฉด dispid์ ๋ํ ์กฐํ ์์ (lookup)์ด ํ์ํฉ๋๋ค.
- ํ์
๋ผ์ด๋ธ๋ฌ๋ฆฌ(from ์ธํฐํ์ด์ค ๋ฆฌํฌ์งํ ๋ฆฌ(repository))์ ๋์คํจ์น ์ธํฐํ์ด์ค IDispatch๋ฅผ ํตํด ํธ์ถํ๋ ๊ฒ์
๋๋ค.
โ COM ํด๋ผ์ด์ธํธ ์์ฑ์ ์ํ COM API
COM ํด๋ผ์ด์ธํธ๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ COM API๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- CoInitialize()/CoInitializeEx()
- COM ํ๊ฒฝ ์ด๊ธฐํ
- COM ํ๊ฒฝ ์ด๊ธฐํ
- CoCreateInstance()
- COM ๊ฐ์ฒด ์ด๊ธฐํ
- COM ๊ฐ์ฒด ์ด๊ธฐํ
- CoUninitialize()
- COM ํ๊ฒฝ ํด์ (์ ๋ฆฌ)
- CoCreateInstance ํจ์
CoCreateInstance()๋ ๋ด๋ถ์ ์ผ๋ก CoGetClassObject()๋ฅผ ํธ์ถํ์ฌ IClassFactory::CreateInstance๋ฅผ ํตํด ์์ฒญ๋ COM ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํด๋์ค ํฉํ ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. CoGetClassObject()๋ ์ฃผ์ด์ง ํด๋์ค ๊ฐ์ฒด์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
CoCreateInstance์ ๋งค๊ฐ๋ณ์์ ๋ํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- rclsid
- ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋ ๋ฐ์ดํฐ์ ์ฝ๋์ ๊ด๋ จ๋ CLSID์
๋๋ค.
- ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋ ๋ฐ์ดํฐ์ ์ฝ๋์ ๊ด๋ จ๋ CLSID์
๋๋ค.
- pUnkOuter
- ์งํฉ ๊ฐ์ฒด(aggregation) ๊ตฌ์กฐ ์ค์ ๊ณผ ๊ด๋ จ๋ ํ๋ผ๋ฏธํฐ์ ๋๋ค.
- NULL์ธ ๊ฒฝ์ฐ, ๊ฐ์ฒด๊ฐ ์งํฉ ๊ฐ์ฒด์ ์ผ๋ถ๋ก ์์ฑ๋์ง ์์์ ๋ํ๋ ๋๋ค.
- NULL์ด ์๋ ๊ฒฝ์ฐ, ์งํฉ ๊ฐ์ฒด์ IUnknown ์ธํฐํ์ด์ค(controlling IUnknown)์ ๋ํ ํฌ์ธํฐ์
๋๋ค.
- controlling IUnknown
- Aggregation ๊ด๊ณ์์, ํด๋ผ์ด์ธํธ์๊ฒ ๋ ธ์ถ๋๋ ์ ์ผํ IUnknown ์ธํฐํ์ด์ค
- ์ฆ, ์ธ๋ถ ๊ฐ์ฒด์ IUnknown์ ๋งํ๊ณ ,๋ด๋ถ ๊ฐ์ฒด๋ค์ ์ด IUnknown์ ํตํด์๋ง ์ ๊ทผ๋จ
- controlling IUnknown
- dwClsContext: ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ์ฝ๋๊ฐ ์คํ๋ ์ปจํ
์คํธ์
๋๋ค.
- riid: ๊ฐ์ฒด์ ํต์ ํ๋๋ฐ ์ฌ์ฉํ ์ธํฐํ์ด์ค์ ์๋ณ์์ ๋ํ ์ฐธ์กฐ์
๋๋ค.
- ppv: riid์์ ์์ฒญ๋ ๋งค๊ฐ๋ณ์ ์ฆ rclsid, riid, ppv์ ์ฃผ๋ก ๊ด์ฌ์ด ์์ต๋๋ค. clsid์ riid๋ ๊ฐ๊ฐ ๊ณ ์ ํ GUID(128๋นํธ 16์ง์)๋ก ์ฐธ์กฐ๋ฉ๋๋ค. ์ด GUID๋ ํด๋์ค์ ์ธํฐํ์ด์ค๊ฐ ์ฐธ์กฐ๋ ์ ์๋๋ก ๋ณด์ฅํ๋ฉฐ ์ด๋ฆ ์ถฉ๋(collision)์ ๋ฐฉ์งํฉ๋๋ค. ์ธํฐํ์ด์ค์ ์ค์ํ ์ธก๋ฉด ์ค ํ๋๋ ๊ทธ๊ฒ๋ค์ด ๋ถ๋ณํ๋ค๋ ์ ์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
Ref. "Malware Analysis Series(MAS) – Article 5", Alexandre Borges
'Study > study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ํ ํ์์ ๋ถ๋ฅ ์ฒด๊ณ ๋ฐ ๋ช ๋ช ๋ฒ (2) | 2025.04.02 |
---|---|
Managed code / Unmanaged code / Native code ์ฐจ์ด (0) | 2025.02.27 |
๋ฐ์ด๋๋ฆฌ์์ ์ํธํ๋ ๋ฌธ์์ด ์ถ์ถ(๋ณตํธํ)ํ๊ธฐ (1) | 2025.02.06 |
Dynamic ์ํฐ ๋๋ฒ๊น (Anti Debugging) ๊ธฐ๋ฒ๊ณผ ์ฐํ (0) | 2024.12.17 |
Static ์ํฐ ๋๋ฒ๊น (Anti Debugging) ๊ธฐ๋ฒ๊ณผ ์ฐํ (1) | 2024.11.29 |