안녕하십니까!
햇병아리 삐약비약 삽잡이입니다.
Driver를 까본다면서... DriverEntry를 그냥 C언어 코드 짤 때main이랑 뭐가 다른가 했습니다... 그래서 무작정 디버깅에 뛰어들었습니다.
기초부터 차근차근 배우는 것도 나쁘지 않겠지만, 저는 미친 삽질의 스타일 대로... 삽질을 각오로 무작정 뛰어들고 필요할때마다... 알아보고 공부해보겠습니다.
|
푸하하...
Driver 계의 Entry Point 인 DriverEntry()에 대해서 알아보도록 하겠습니다.
우선, EntryPoint란 뭘까요?
프로그램을 시작할때 어디서 부터 시작할 것인가요?
자기 멋대로 '여기서 부터 시작하겠어!' 라고 하며 각자 다른 부분 부터 진행한다고
프로그램이 올바르게 시작할까요? 그렇지 않습니다...
그렇기에 모든 프로그램은 'EntryPoint의 주소로 부터 시작된다.'는
약속을 가지고 있습니다. 어찌보면 당연한 것입니다.
집에 들어갈때 문으로 들어가지 창문을 열고 들어가지는 않으니까요....
(비유가 적절했을까요... 허허...)
/* 지금부터 이 글의 EntryPoint가 시작됩니다.
허허 위에 저의 DogSound를 지나치시고 여기서 부터 읽으셔도 무방합니다! */
음... 그런데... 드라이버는 I/O Manager에 의해 로드되어 진다는 것을 아시나요?
I/O Manager가 DriverObject를 생성하고 이 값을 채워넣어 DriverEntry에 던져줍니다.
자 우리의 친구 MSDN에는 DriverEntry를 뭐라고 설명했을까요?
"DriverEntry is the first routine called after a driver is-loaded, and is responsible for initializing the driver." 라고 정의되어 있습니다.
드라이버엔트리는 드라이버가 로드되고 콜 되는 첫번째 루틴입니다.
그리고 드라이버 초기 내용을 설정해준다고 합니다.
뭐 쉽게 말하면 시작점이죠! 계속 이 말만 반복하네요...
아무튼... 이렇게 생겨먹었습니다.
인자들은 어떻게 되어 있나요...
음... 첫번째로 DRIVER_OBJECT 구조체의 주소를 받습니다.
그러니깐, I/O Manager가 던져준 DRIVER_OBJECT의 주소죠!
DRIVER OBJECT는 뭐냐... 바로 드라이버에 대한 정보를 관리하는 객체입니다.
그리고 두번째 인자로... 드라이버의 레지스트리 키의 경로를 받네요...
흠.. 종합해본다면...
DriverEntry() 함수는 즉, 드라이버가 메모리에 적재될때 I/O Manager에 의해 호출되고,
드라이버가 가지는 함수들의 엔트리 주소를 등록해주는 기능을 하네요!
뭐... 그렇다네요... 그렇습니다...
Intro만 길었네요... ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아무튼... 이제 DriverEntry가 뭔지... 얕게(?) 알았으니...
디버깅할때 이런 부분이 나온다면! 아주 조금이나마 수월히 이해할 수 있겠군요!
저는 또 초보티를 벋어나기 위해 달리고 삽질을!!!
아직 햇병아리 초보티 팍팍!!!
귀엽게 봐주시고
사명감을 가지고 IT분야에서 날 뛸 수 있는날이 올때까지! ! 뽜이아!
이상 삽잡이였습니다!
[참고 자료]
http://msdn.microsoft.com/ko-kr/library/ff544113(v=vs.85).aspx <-- MSDN DriverEntry
http://lsleez.tistory.com/23 <-- 드라이버 개발 공부를 하는데 참조할 만한 내용들이 많은...
[구글 키워드]
Window Driver
DriverEntry
EntryPoint
http://sapzape.tistory.com/29
'삽질의 현장 > - 윈도우 커널' 카테고리의 다른 글
윈도우커널_#020_본격! WinDbg로 Target PC(Guest) 에 프로세스 디버깅하기! (0) | 2015.06.09 |
---|---|
윈도우커널_#019_RtlInitUnicodeString & InitializeObjectAttributes & ZwOpenKey & IoCreateDevice (0) | 2015.06.09 |
윈도우커널_#017_커널을 까볼자! Kernel Driver Debugging 도전기 (2) (0) | 2015.06.09 |
윈도우커널_#016_커널을 까보자... Kernel Driver Debugging 도전기 (1) (0) | 2015.06.09 |
윈도우커널_#015_끝까지 물고늘어진다! 윈도우 커널 디버깅 끝판왕!!! (0) | 2015.06.09 |