Microsoft MVP성태의 닷넷 이야기
VC++: 34. 64비트 윈도우즈에서의 이벤트 후킹 [링크 복사], [링크+제목 복사],
조회: 23812
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 


64비트 윈도우즈에서의 이벤트 후킹


이미, 경험해 보신 분들은 잘 아시겠지만. x64 윈도우즈에서는, 기존 32비트 윈도우즈용으로 작성한 응용 프로그램 중에서 이벤트 후킹을 사용한 프로그램은 정상적으로 동작하지 않게 됩니다.

예를 들어, 프로세스 이름이 testhook.exe이라고 하면. 전역 윈도우즈 이벤트 후킹을 하기 위해 testhook.dll이라는 것도 만들었을 것입니다. 물론, 그 2개의 바이너리는 32비트 모듈이지요.

"32비트 모듈은 32비트 프로세스에서만 로딩이 가능하고, 64비트 모듈은 64비트 프로세스에서만 로딩이 가능하다"라는 것을 떠올리면 왜, 이벤트 후킹을 사용한 프로그램이 정상적으로 x64 윈도우즈에서 구동되지 않는지 알 수 있습니다.

testhook.exe 프로세스가 x64 윈도우즈에서 실행되면 WoW의 도움을 받고 있다는 표시로 작업관리자에서는 "test.exe *32"라고 표시가 됩니다. 그렇게 32비트 프로세스로 초기화된 프로그램에서 SetWindowsHookEx를 호출하여 훅 프로시져가 있는 "testhook.dll"을 지정하게 되면, 작업관리자에서 볼 수 있는 모든 64비트 프로세스들에서는 32비트 "testhook.dll"을 로드 할 수 없기 때문에, 프로세스 컨텍스트 스위칭이 발생할 때마다, 후킹이 동작했다/안했다를 반복하게 됩니다.

따라서, 원하는 데로 이벤트 후킹을 하려면.

testhook32.exe/testhook32.dll과 testhook64.exe/testhook64.dll을 별도로 준비하고, 각각의 프로그램에서 SetWindowsHookEx를 호출해 줘야 합니다.

32비트와 64비트 응용 프로그램이 공존하는 동안은.



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/11/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 166  167  168  169  170  171  [172]  173  174  175  176  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
704정성태4/19/200920819개발 환경 구성: 39. Together 2007 SP1 설치
702정성태4/18/200932101.NET Framework: 130. Infragistics - Tabbed MDI WPF 응용 프로그램파일 다운로드1
701정성태4/17/200926987Windows: 44. bootsect 오류 - Access is denied.
700정성태4/17/200930075.NET Framework: 129. Infragistics WPF 컨트롤 사용 [1]
699정성태4/16/200928622.NET Framework: 128. 이벤트 멤버의 명시적 구현파일 다운로드1
696정성태4/12/200927853오류 유형: 77. RDP 연결이 되지 않는 경우. [1]
693정성태4/9/200922343오류 유형: 76. "Client found response content type of '', but expected 'text/xml'. The request failed with an empty response.No Reports".
692정성태4/8/200935324.NET Framework: 127. ClickOnce로 ActiveX를 같이 배포하는 방법 [2]파일 다운로드1
690정성태4/5/200922916오류 유형: 75. Event Viewer - The data is invalid (13)
688정성태4/5/200928968VS.NET IDE: 60. Output 경로에 매크로 상수 사용하는 방법 [1]
687정성태4/5/200923334.NET Framework: 126. Composite Application Guidance for WPF and Silverlight
689정성태4/5/200923184    답변글 .NET Framework: 126.1. CAG - 빌드 환경 구성파일 다운로드1
691정성태4/6/200922989    답변글 .NET Framework: 126.2. CAG - Shell 띄우기파일 다운로드1
695정성태4/10/200924735    답변글 .NET Framework: 126.3. CAG - 간단한 유형의 모듈 제작파일 다운로드1
703정성태4/18/200923577        답변글 .NET Framework: 126.6. CAG - Tabbed MDI Shell 적용파일 다운로드1
697정성태4/13/200927819    답변글 .NET Framework: 126.4. CAG - Unity 컨테이너 사용 [1]파일 다운로드1
698정성태4/15/200927123    답변글 .NET Framework: 126.5. CAG에 MVVM 패턴 적용 (1) [2]파일 다운로드1
686정성태4/4/200948779웹: 11. IE 8 - TabProcGrowth 레지스트리 키 [2]
685정성태4/3/200949551개발 환경 구성: 38. Hyper-V 사용 후기 [5]
684정성태4/2/200924027오류 유형: 74. IE 8 설치 이후, VS.NET 위저드 화면 동작 오류
683정성태3/28/200930731디버깅 기술: 26. 보호 모드로 응용 프로그램 디버깅하는 방법 - 두 번째 이야기 [3]
682정성태3/27/200927893디버깅 기술: 25. 보호 모드로 응용 프로그램 디버깅하는 방법 [2]
681정성태3/23/200925075오류 유형: 73. SQL Server 2008 Express 설치 오류
680정성태3/21/200924970.NET Framework: 125. WPF - RadioButton에 대한 데이터바인딩(2) [1]파일 다운로드1
679정성태3/15/200920079오류 유형: 72. IE 8 멈춤 현상 - 두 번째 이야기
678정성태3/15/200925163개발 환경 구성: 37. Hyper-V에서 Vista의 Virtual Machine Bus 장치 인식 문제
... 166  167  168  169  170  171  [172]  173  174  175  176  177  178  179  180  ...