> vs2010 에서 다음과 같은 오류가 발생한다 c1xx : fatal error C1027: 미리 컴파일된 헤더를 만들 때와 사용할 때의 /Ym의 값이 일치하지 않습니다. c1xx : fatal error C1027: Inconsistent values for /Ym between creation and use of precompiled header > 왜지?검색어: C1027 error 비슷한 고민을 한 사람이 많았다. 그 중에 error C1027: Inconsistent values for /Ym between creation and use of precompiled header (C++) ... Microsoft이(가) 2012-05-11, 오후 6:28에 게시 Hi: /Ym is an int..
윈도우 드라이버 작성할 때에 꼭 동기화 개체 이야기가 나온다. 물론 락이 아예 필요없는 구조로 가는게 더 좋은 방법이지만... 멀티 스레드 기반이니, 동기화 개체를 안 쓸래야 안 쓸 수도 없어 보이기도 하다(^^) lock-free, wait-free 등을 쓰고 싶으나, 일반 구현은 CAS 명령어에 의존하는 형편이다. 하지만, 64비트에서는 인라인 어셈을 원초적으로 거부하는 형식이라, 외부 어셈을 달아 써야 한다. 글구 너무 플랫폼에 종속이 되버린다. 완전히 알고리즘적으로 해결한 경우는 못 찾아서 내부적인 자료구조임에도 불구하고 계속 동기화 개체를 찾아 써야 하는 상황이다. STM 등을 고려해 볼까 했는데, 마음만 바쁘다. 암튼...다음은 윈도우 비스타 기준으로 나온 동기화 개체 일람이다. 락 프리가 되..
윈도우 버전만 잘 알아서 디버그 심볼 설치 파일을 받으면 된다 그다지 신통치 않으면 이렇게 해보자. windbg 가 설치된 폴더를 잘 보면, symchk.exe 라는 심볼 유틸리티가 있다. 이것으로 강제로 가지고 오도록 하자. symchk /r c:\windows\system32 /s SRV*C:\debugsymbols*http://msdl.microsoft.com/download/symbols 앞에 주소는 체크할 바이너리가 있는 곳이고, 뒤에 주소는 심볼 서버 주소에, 심볼을 저장할 위치이다. http://support.microsoft.com/kb/311503 여기서 발췌함 WinDbg 안에서 처리하려면... .sympath SRV*f:\localsymbols*http://msdl.microsoft...
비스타 이전에는 굳이 설정안해도 verbose 모드이면 디버그 메시지가 잘 나왔었던 것 같다. 그런데, 비스타부터는 디버그 메시지 필터링 레지스트리를 설정해야 한다. 이유인즉 비스타부터서는 DbgPrint 를 DbgPrintEx 로 매핑시켰기 때문이란다(http://www.osronline.com/article.cfm?article=295). DbgPrintEx는 레지스트리 설정값에 따라 출력할 수도 안할 수도 있다. 간단하게 모든 디버그 메시지를 보고 싶다면, WinDbg 프롬프트에서 ed Kd_DEFAULT_MASK 0xf 이제부터 잘 보인다. 물론 재부팅 후에는 다시 설정해 줘야 한다. 귀찮으니까, 디버깅을 할 PC에서 레지스트리를 설정해 버리자. 레지스트리 HKLM\SYSTEM\Current Co..
WinDbg 관련 WinDbg 치트키! ㅎㅎ 실전 예화 1? ㅎㅎ 실전 예화 2? ㅎㅎ 실전 예화 3? ㅎㅎ 실전 예화 4? ㅎㅎ 윈도우 덤프 분석팀? 블로그 윈도우 커널 소스 구조? 그냥 그냥2 디버깅 튜토리얼~ vmware에서 잇기 윈어셈 + WinDbg 로 디버깅 OS 디버깅 심볼 받기 뭔가 재미난 사이트~ 게리 네벳(Windows NT/2000 Native API 저자로 리버싱에 달인인듯) 말많은 인캅스3 지우기 여기서 보려면 더보기 클릭~ incops3 제거 삭제 Uninstall 설치된 위치: C:/WINDOWS/incops3/ 레지스트리삭제, 서비스중지, 프로세스킬, msconfig 수정등을 해도 소용없는 뻘짓 해결방법 % cd C:\WINDOWS\incops3 None으로 권한변경 % ca..
유닛 테스트 - 드라이버 DriverEntry 에서 바로 테스트하자. 로드 실패하면 되니까. BOOLEAN testUnitTest() { #if defined(DBG) ... #endif return TRUE; } NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { ... if ( !testUnitTest() ) { return STATUS_ACCESS_DENIED; } ... }