본문 바로가기

프로그래밍/미분류

(82)
0xF4 CRITICAL_OBJECT_TERMIN Following is a blog posting capture with my korean comments on it. I translated some foreign informational text into korean in order to share the information with korean readers. However, I thought some of the key text translation should suffice for technical texts. So I decided to capture the posting and put some korean translations of key sentences beside them. This posting is not inteneded to..
Shell_NotifyIcon 실패에 대한 대응 http://msdn.microsoft.com/en-us/library/windows/desktop/bb762159(v=vs.85).aspx Shell_NotifyIcon 실패에 대한 대응 Handling Shell_NotifyIcon failure Shell_NotifyIcon 가 윈도우가 시작하며 불리면 종종 실패한다. (예를 들어 응용 프로그램이 HKLM\Software\Microsoft\Windows\CurrentVersion\Run 에 등록되어 있다던가. ) 이유는 시스템이 응용 프로그램들을 시작시키는 데 바쁘기 때문인 것으로 보인다. 이 실패는 낮은 사양의 컴퓨터 또는 시작할 때 부하가 큰 특정 백신 소프트웨어가 설치되어 있는 경우에 더 잘 발생하는 것 같다. Shell_NotifyIcon w..
윈도우 환경에서 플랫폼 SDK 사용하기 c프로그래밍을 처음 시작하는 사람들에게 넘기 어려운 커다란 산이 내 컴퓨터에 어떻게 개발환경을 만드느냐는 것이다. 주변에 친구가 있거나 학교에서 배우는 사람들이라면 별 어려움 없이 물어봐서, 또는 컴파일러나 IDE를 받아서 깔아서 개발환경을 갖추겠지만, c를 혼자서 한번 배워봐야지 하는 마음으로 책을 한권 사서 보려는 사람에게 책에 나온 재밌어 보이는 것들을 실습해 보는데에 무엇이 필요한지를 알아내는 건 커다란 고민이다. 많이 추천하는 방식은 어디에선가 받은 비주얼 스튜디오 6.0을 깔아서 해 보는 방식일 것이다. 그러나 이건 엄밀하게 합법적인 방법이 아니다. 그 다음 방식은 비주얼 스튜디오 익스프레스 버전을 무료로 다운받아 깔아 환경을 갖추는 것이다. 아주 좋은 실습환경이 갖춰지지만, mfc 등 많은 ..
stack frame 그림. Microsoft Tech Ed 03 : Microsoft Windows Crash Dump Analysis (Mark Russinovich, David Solomon) 이라는 인터넷에서 다운받은 문서에 있는 그림.스택쓰레드 마다 한 개의 유저모드 스택과 커널모드 스택이 있다.유저모드 스택은 x86에서 보통 1MB이다.커널모드 스택은 x86에서 보통 12KB이다.스택은 중첩된 함수 호출을 가능하게 한다.패러미터가 스택을 통해 전달된다.복귀주소를 저장한다.지역변수의 저장소로 기능한다.특이한 호출규약(calling convention)을 사용하면 스택을 분석하기 어려워진다.프레임 포인터 사용 안함.레지스터를 통한 패러미터 전달 (fast calls)이 경우 디버거는 파싱을 위해 심볼정보가 필요하다.
크래시덤프분석 ObInsertObject PspCreateProcess 는 프로세스 객체를 생성하고 초기화하고, 프로세스 핸들을 리턴해 준다. 객체 생성은 ObCreateObject 를 호출하여 이루어진다. ObCreateObject(KeGetPreviousMode(),PsProcessType,ObjectAttributes,KeGetPreviousMode(),0,0x258,0,0,&ProcessObject); 위의 예에서는 PsProcessType 객체 타입의 객체가 만들어지고, 0x258 이라는 사이즈는 윈도우 버전마다 틀리다. ProcessObject 는 다른 객체처럼 OBJECT_HEADER 헤더가 붙는다. OBJECT_HEADER는 다음과 같다. OBJECT_HEADER: +0x000 PointerCount : Int4B +0x004 H..
[VS2008] AddVariable 시 DoDataExchange에 컨트롤과 변수 연결코드가 자동으로 생성되지 않는다. 6.0까지는 클래스 위자드를 이용해서 간단하게 컨트롤과 변수를 연결할 수 있었다. 변수를 생성하면 컨트롤과 변수 사이에 값을 세팅해 주거나, 값을 가져오는 코드가 DoDataExchange 안에 자동으로 생성된다. 2008까지는 클래스 위자드가 없어지고, 리소스 에디트 화면에서 컨트롤 - 오른쪽클릭 - AddVariable 메뉴를 통해 변수를 추가한다. 변수를 추가할 때 컨트롤이 아닌 CString, int 등의 Value 형 변수를 추가하려고 했는데, UpdateData가 동작하지 않는 것 같았다. DoDataExchange함수 안에 해당 컨트롤-변수간의 통신과 관련된 코드가 추가되지 않았었다. 문제를 해결하기 위해 검색을 해 보았더니, 내가 Value 변수를 만들 때 Variable Wizard를 잘..
64비트 : 64비트 시스템의 32비트 프로세스에 붙은 64비트 DLL 다국어 편집기 madedit 32비트를 64비트 윈도우에서 실행한 상황. 해당 프로세스에 5개의 64비트 dll이 달려있다. wow64*.dll 3 개와 apisetschema.dll (검색해 보니 virtual dll과 logical dll을 매핑해 주는 역할을 한단다.), 그리고 ntdll.dll 이 있다. ntdll은 64비트 버전과 32비트 버전 두 개가 달려 있다. 너무 당연한 이야기인지도 모르겠지만, 64비트 dll도 4G 영역을 넘지 않는 곳에 배치되어 있다. 그런데 어떻게 로드될 수 있는 건지? 32비트 프로세스 안에서 어떤 식으로 주고받고 동작하는 걸까? 궁금하다.
2004년 개발 시작하며 적었던 노트 2004년 아무것도 모르고 거의 처음 투입되었던 프로젝트에서 개발하며 적었던 노트다. 노트 제목은 버그 사냥기라고 적었었다. 열심히 해 보려고 이것저것 기록하려고 했었는데, 뭐 만났던 문제를 다 적어던 건 아니지만, 어제 저녁에 우연히 다시 읽어보니 재미있었다. 좀 부끄러운 것도 있기는 한데, 재미도 있어서, 나의 기록으로 남겨본다.