삽질의 현장/- 윈도우 커널

윈도우커널_#002_커널은 서버라고? 직접 보여줘!

shovelman 2015. 6. 9. 23:18

 

 

 

 

[이전 이야기]

001. 커널은 뭐다? 서버다! :  http://sapzape.tistory.com/4

 

 



안녕하세요 삽잡이입니다.

분명 어제 침대에 누워있었는데 일어나니 다음날이네요.. 허허..

그런 의미로 체력 만빵 파워를 사용해 오늘은 지난 시간의 내용을 허접하게나마

증명하고자 합니다.

 

지난 시간에 뭐라 했었죠? 커널은 뭐다?

커널에 대해서 열변을 토하셨던 분의 있죠.. 그분의 간절함을 다시한번 시청해봅시다.

 

미친감자 커널은 서버라고
우기고 있습니다....
아무도 들어주질 않습니다....
커널이 커널이지..뭔 서버야?
게임서버라도 되는거야?
라고 하면서 말이죠....둘중에 하나는 무식한것입니다.
아니 둘다 무식할 수도 있고요.



 

예 여기까지... 잘 보셨나요? 침이 여기까지 튀는것 같네요...

 

맞습니다. 커널은 서버라고 했습니다.

혹시 기억이 잘 나지 않는 분들은 위에 [이전 이야기](클릭 가능)를 참조해주세요~

 


 이봐 삽잡이. 입만 산 사람은 입으로 망한다구...

실제로 핸들을 어떻게 던져주는지 볼 필요성이 있다...

삽잡이~~ 어디 한번 보여줘봐~~


 

 

자! 그렇다면~ 오늘은!

"커널은 서버다. 서버는 CPU를 중심으로 하드웨어를 서비스한다. 그 서비스는 누구에게 하느냐. 바로 클라이언트다. 클라이언트는 프로세스다. 클라이언트에게 어떻게 서비스를 하느냐. Handle을 클라이언트에게 던져준다. Yo~"

 

바로 Handle을 어떻게 던져주는지 보겠습니다!

 

GO GO GO!

 

 

우리가 실제로 Handle을 던져주는 모습을 보기위해서는...

WinAPI 친구에 속해있는 Createfile()이라는 녀석의 도움을 받아야합니다!

 

안녕 친구야!?

 

 

거참 잘 던져주게 생겼네요.. 하하하


 


 

 

짜잔! 이것이 바로 CreateFile의 본 모습입니다. 참으로 아름답게 생겼네요 허허허..

그렇다면 저기 HANDLE이 바로 던져주는 Handle을 말하는것이겠죠?

 

자 그러면 이제 어떻게 던져주는지 한번 살펴볼까요???

 

차마 너무도 부끄러워 보여드릴 수 없는 저의 소스 코드에서

부끄럽게나마 은밀한 그곳(?)만 여러분에게 보여드리죠...

 

자... 간단하게 작성한 코드에서 쬬~기 빨간 흔적들이 보이시나요?

맞습니다!

createfile()을 통해 얻은 handle값을 hFile 변수에 저장해둡니다.

 


hFile 값이 다음 아랫줄로 내려가니 0xffffffff로 채워졌네요!

 


 

자... 0xffffffff 값 뭔가 아름다운 값같지 않습니까?

핸들값이 나와도 무슨 저렇게 획일적(?)인 값이 나올 수 있을까요??

 



 

 

..? 뭐죠...

 


 

그렇습니다.. 에러값이었습니다.

 


 

아하 이런식으로 써있네요.. 뭔가 잘못 구성되서 그렇다고 나와있습니다.

그래서 위에 살펴 보니 createfile 에 값을 넣을 때 파일 경로를 잘못 써줬었네요 ㅎㅎ

 

그럼 고치고 샤샤샥~ 이제 정말 제대로 된 결과를 보여드리겠습니다!

경로를 제대로 쓰고... 실행을 하니까..

 


 

요랬던 값이...

 


 

짜잔! 정말 핸들 값을 던져줬군요!

 

미친감자님이 없었다면 생각도 없이 지나칠뻔 했네요...

고마워요 미친감자!   

 

그럼 다음 시간에는 processhacker라는 대단한 프로그램을 가지고

실제로 handle값을 받는 모습을 생생하게 감상하시겠습니다.

 

그럼 다음시간에 뵙겠습니다.

 

이상 삽잡이였습니다!

 

[참고자료]

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx  <-- mdsn 설명


http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/4200/CreateFile

<-- 예시와 함께 훌륭한 설명

 

http://winwiki.org/stop-0xffffffff/ <-- 0xffffffff에 대해서 나온 설명

 


 

[구글 검색 키워드]

createfile

0xffffffff


http://sapzape.tistory.com/6