쿠쿠 짧고 굵게 하넹… 푸풉 예전에도 본것같은데… 주변에 하자하자해도 반응이 없어서 안했었는데… XILINX 한번 검색해봤는데 신기하당… 잼있어보여… 휴학생도 가능한가??? 쿠쿠 할 사람 손!!! ——————————————————————————————— XILINX 공인인증 센터 INTENSIVE 초급 교육인증 과정 ♦ 일정장소 : 2008년 1월 22일(화) ~ 25일(금) 오전 9:00 ~ 오후 5:00, 형남공학관 522호♦ 교육대상 : FPGA에 관심 있는 IT대학 3개 학부 소속 학부생 및 대학원생♦ 수강인원수 및 수강료 : 최대 20명, 수강료 무료 (실습 장비 및 교재 제공)♦ 신청서 접수 기간 : 2007년 11월 28일(수) ~ 12월 20일(목)까지♦ 문의처 : 정보통신전자공학부 이원철교수…계속 읽기 “재미있어보인다 쿠쿠”

드라이버를 개발하면서 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를 깔아 봅시다 쿠쿠”

‘const char [14]’에서 ‘LPCWSTR'(으)로 변환할 수 없습니다. 해결 ->  가장 큰 건 프로젝트 설정이 멀티바이트가 아니라 유니코드 라는 거군요. VS2005는 유니코드 문자셋을 프로젝트 기본설정으로 가져서 사용자에게 유니코드를 사용해서 프로그래밍하라고 압박을 합니다. 프로젝트 속성 – 구성속성 – 일반 – 문자집합 – 유니코드 문자 집합 사용을 멀티바이트 문자 집합 사용으로 바꾸어 주시면 됩니다. 출처 : Tong – beizix님의 MFC – error 체크통

흠…특정 문자열로 숫자와 영어 조합으로 되어 있는 것을 출력해보면… 크기 차이로… 아래와 같이 밀리는 걸볼 수 있다… 처음에는 자간차이인가 해서.. 자간쪽 알아보다가… 리치에디터 CHARFORMAT2 구조에대해알아보게 되고… 뭐 여러가지 바꾸는게 많군… 하다가 글자체를 한글에서 하나씩 바꾸다 보니..바탕체로 하니까 딱 원하던 것이다… 그래서 CHARFORMAT2 구조체에 글자색이랑 글자체랑..정보들 담아서.. Richedit에게 메시지 보내니까 바로 ㅇㅋ!!!나중에 안거지만.. 글자체 만 바꿀려면.. 그냥 폰트쪽만 건드리면 되는건데…. 쩝… 암튼 졸려서 여기까지…   CHARFORMAT2  cf;   // Richedit 문자 속성 정하는 부분  memset ( &cf, 0, sizeof ( CHARFORMAT2 ) );  cf.cbSize = sizeof…계속 읽기 “흠냐… 리치에디터 Chracter Format 변경 방법….”

아 60십억…. 파일 오픈 다이얼로그가 계속 안떠서… 완전 삽질 삽질하다가…. 책에서 있는 예제 퍼와서 했는데…왜 안되지 안되지 하다가… 설마.. 책에 = “” 요거 하나 안쳐서 안될까… ㅡ.ㅡ;;;정말 그랬다… lpstrFile[MAX_PATH] = “”  <== 에라이 육십업… 십장생!!! 개나리!! 말미잘… 신텍스!!! —————————————————————————————————-char                          lpstrFile[MAX_PATH] =””OPENFILENAME        OFN; memset ( &OFN, 0, sizeof ( OPENFILENAME ) );OFN.lStructSize = sizeof ( OPENFILENAME );OFN.hwndOwner = hWnd;OFN.lpstrFilter = “SIC/XE Obj파일\0*.obj\0′”;OFN.lpstrFile = lpstrFile;OFN.Flags=OFN_NOCHANGEDIR;//여기OFN.nMaxFile = MAX_PATH;if ( GetOpenFileName ( &OFN )…계속 읽기 “아… 완전 삽질의 연속.. 초기화의 중요성!!!!!!!!!!!!!”

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