드라이버를 개발하면서 WinDbg 로 커널 디버깅을 할 때 가장 귀찮은 작업중 하나가 Debugger(개발시스템)에서 드라이버를 빌드한 후에 이것을 Debuggee (테스트시스템)로 복사해줘야 한다는 것입니다. 이것을 해결해 주는 편리한 명령어가 있었으니 바로 .kdfiles 입니다. .kdfiles (Set Driver Replacement Map).kdfiles command 는 맵파일을 읽어서 그 내용에 있는 대로 Debugger 시스템에 있는 드라이버 파일을 Debuggee 시스템에 복사하게 합니다. [Syntax].kdfiles MapFile ( MapFile 을 읽는다 ).kdfiles -c         ( 현재 설정을 지운다 ).kdfiles             ( 현재 설정을 보인다 ) 파일복사는 커널 디버거가 연결된…계속 읽기 “[펌] WinDbg를 이용해서 컴파일 후 파일 debuggee로 자동 복사하기”

므흣!!! 간단하지만 키보드 입력 데이터 가져왔당!!! 쿠쿠 <ntddkbd.h> 헤더 파일에 PKEYBOARD_INPUT_DATA 구조체가 있었다… 그래서 그냥 irp->AssociatedIrp.SystemBuffer 값을 그냥 저 구조체 변수에 넣어주면 된다. 유유 유유 디버거에서 Hook Done Dispatch에 뷁포인트 걸고서 디버기에서 메모장 열고 ‘a’ 를 입력하면 뷁포인트 건 곳에 멈춰지고, …….else if ( irp->AssociatedIrp.SystemBuffer )  {        pBuffer = irp->AssociatedIrp.SystemBuffer;                                            } ……. pBuffer에 배정하고 나면 아래와 같이 PKEYBOARD_INPUT_DATA 구조체 변수 pBuffer에 아래와…계속 읽기 “드디어 키보드 데이터 얻어내기 성공!!!”

윽 엄청난 삽질로… 완전 포기 단계 까지 갔다가… 막판에 저번에 사용하던 심볼링크이름으로 디바이스포인터 얻어오는 방법을 했더니만… 오오케이!!! 쿠쿠 이제… 필터 디바이스로 통해 들어오는 정보들 처리하면 되겠군… 아… 부족해… 실력이.. 유유 유유 //////////////////////////////////////////////////////////////////////////// AttachDevice 함수// GUIDeviceObject : GUI Device 포인터를 받아들이는 인자// 기능 : Keyboard Device에 Keyboard Filter Device를 붙여준다.BOOLEAN AttachDevice ( IN PDEVICE_OBJECT GUIDeviceObject ){ NTSTATUS   status; PDEVICE_OBJECT  KbdDevice, KbdHookDevice; PDEVICE_EXTENSION pDevExt; UNICODE_STRING  KbdName; PFILE_OBJECT  pFileObject;  // KbdName Unicode String에 Keyboard class 이름을 넣는다. RtlInitUnicodeString ( &KbdName, L”\\Device\\KeyboardClass0” );  // KbdName을 통해서 Keyboard Device Object 포인터를 구한다 status = IoGetDeviceObjectPointer (…계속 읽기 “음… Attach하는데 완전 오래걸렸네…”

처음에는 마우스와 키보드의 필터드라이브를 같이 구현하려고 했는데… 예전에 파일시스템 필터드라이브 만들때는 L”\\DosDevices\\D:\\” 이런 디바이스 링크이름을 알아서 링크와 관련되 디바이스 포인터를 얻어 올 수 가 있었는데… 키보드랑 마우스 링크이름을 몰라서 필터 드라이브를 붙일 디바이스 포인터를 얻어 올 수 없다 유유 방법이 있긴 있을텐데.. 워낙 자료가 부족하다보니… 그래서 우선 키보드 필터드라이버 하나만 구현하고자 시작했다… 초반에 드라이버 제작 환경 구축하느라 예전에 했던 환경설정 작업 뻘짓하고… 오늘은 우선 Win32와 통신 할 디바이스 본체 구현 해 놓았고 DDK 예제 보니까 드라이버 올릴때 자동으로 Attach 시키는 부분이 설정 되어 있길래 DriverObject->DriverExtension->AddDevice…계속 읽기 “Keyboard Filter Driver 스타토~~~~”

.hh : 도움말 파일을 부른다ex) .hh xx : 도움말이 열리면서 xx 에 대한 설명을 보여준다 .chain : 로드된 확장 DLL을 보여준다.load : 확장 DLL을 로드한다.unload : 확장 DLL을 언로드한다.unloadall : 모든 확장 DLL을 언로드한다 !process : 프로세스 정보 보기ex) !process 0  => 모든 프로세스 보기      !process 0 4  => 쓰레드 포함 모든 프로세스 보기 !dc : 물리 메모리 내용 보기 ? 16진수 : 10진수로 보기 !driver : 현재 로드된 드라이버 보기 !kb : 스택 추적 !handle [Handle [KMFlags [Process [TypeName]]]] lm : 로드된…계속 읽기 “WinDbg 약간의 명령어들~~~”

오홋!!! 깔아놓고… 사용법을 찾아서 이리저리 헤매다가 조금씩 사용법을 익혀가고 있다. 디버기에서 내가 만든 SFFD 드라이버 올리고서, 시작하고나서 Windbg거에서 Ctrl + Break으로 디버기를 잡아놓는다. 그리고 x 명령어로 로드된 심볼들을 확인!!! 0: kd> x <드라이버명>!* 0: kd> x SFFD!*f87501ac SFFD!ConfigPath = struct _UNICODE_STRING “D:\conf\”f8750094 SFFD!__security_cookie_complement = 0xffff44bff874f0f4 SFFD!KeTickCount = struct _KSYSTEM_TIMEf8750018 SFFD!DecryptData = 0xf874c070f8750124 SFFD!HashTable = 0x00000000f8750290 SFFD!OutstandingIRPCount = 0f8750128 SFFD!XorKey = unsigned char [129] “”f8750120 SFFD!CountMutex = 0f8750098 SFFD!FullPathLookaside = struct _NPAGED_LOOKASIDE_LIST 이제 원하는 곳에 뷁포인트를 걸어서 따라가보자~~~ 유후~~ 0: kd> bp <드라이버명>!<심볼명> 0: kd> bp…계속 읽기 “오홋!!! 조금씩 WinDbg의 위력을…. .오오오오오오오~~~”

오호!!! 작동은 한다 ㅡ.ㅡ;;; 그러나 사용법은 아직 잘 모른다 쿠쿠 하나하나 익혀나가야지~~~ 쿠쿠 설레여 막 요래!!——————————————————————————————————————————————–WINDBG 최신버전 받는 곳 : http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx 참조 할 사이트 : http://snoya.ye.ro/driver/windbg/windbg.html                                http://www.codeproject.com/debug/windbg_part1.asp <= WINDBG 사용법!!!                                 http://somma.egloos.com/1627566 <= 이분 블로그.. 자주 가보게 되네… 찾다보면 다 걸리네.. 1. 첫단계 – 그럼이제 따라하기 시작해봅시다. 일단 위 WinDbg 다운로드 하셔서 프로그램을 설치합니다.    그리고 바탕화면에…계속 읽기 “자자!! 이제 VMWARE도 깔았겠다… WINDBG를 깔아 봅시다 쿠쿠”

흠 요번에는 과제를 페이퍼로 출력해서 주셔서…. 은근히 긁어오기도 힘들고… 쿠쿠 첫번째 프로젝트에서 SIC/XE 어셈블러를 만들고 어셈블해서 생긴 오브젝트 파일을… 메모리에 올리고… 존재하지 않는  SIC/XE머신때문에 기존 컴퓨터에서 돌려 볼 수 있도록 하는 시뮬레이터 만들기…. 흠.. 요즘 일상의 70~80%를 투자 하고 있는데..  내 돌탱이 머리가… 고생하네… ㅎㅎ 그래도 조금씩 성과가 있으니 할만하지… 아니면…. 컴퓨터와 내 돌탱이 중 하나가 박살나있을 듯.. 쿠쿠 시스템 프로그래밍 수업도 이제 끝이 나가는구나… 요번 프로젝트가 마지막 프로젝트.. 애착이가서 인지 요번 학기중에 가장 시간을 많이 투자 하고 노력하고 있는 과목… 과연 결과도 좋을지… 걱정이네…계속 읽기 “두번째 과제… 로더와 시뮬레이터…”

프로젝트 1은 SIC/XE 머신의 어셈블리를 작성하는 것입니다. 그림 2.15 (Control Section)를 입력으로 받아서 그림 2.17을 출력으로 만들어야 합니다. 첨부한 안내서를 참조하여 코드를 작성하기 바랍니다. 프로그램 설명서, Source File (1면에 2장씩 출력), input/output 파일을 포함하여야 합니다. 최종 마감은 5월 10일까지 입니다. (수요일 수업반은 오전 10시반까지 정보과학관 526호로 제출해주기 바랍니다.) 프로젝트 가이드 프로젝트1 보고서 프로젝트1 Source ———————————————————————- 오 마이갓…. 어떻게 코딩하라고 나와버렸다… 조금씩 조금씩 완성해 가고 있었는데…. 대 수정작업이 필요 할듯…. 오마이갓 돌아거시겄네…. 우짜라고….. ㅠ.ㅠ

그림 2.5를 입력으로 받고, Mnemonic Code를 Opcode로 변환시키는 프로그램을 완성하시오. (C 프로그램으로만 작성!! LEX를 사용해도 됩니다.) 1. OPTAB을 작성 2. 입력 파일: 그림 2.5를 파일로 입력받으시오. 3. 출력파일: Intermediate 파일을 만들고(그림 2.6) opcode부분만 출력 4. 보고서에 있어야 할 내용 프로그램 설명, comment가 포함된 프로그램 소스, 결과 출력 5. 제출일 4월 4/5일 수업시간까지 두번째 숙제 보고서

Due Date 3/26일 1. 학번을 5로 나누어서 남은 숫자가 m이라면, m=0, CrayT3E; m=1, PowerPC; m=2, UltraSPARC; m=3, Intel x86; m=4, VAX Powerpoint로 정리해서 제출하시오. 메모리스틱으로 가져와서 발표 준비하세요. 2. 1장 연습문제 2, 3, 10, 11번을 정리해서 제출해주세요. 숙제HW1HW1보고서 UltraSPARC PPT