본문 바로가기

프로그래밍/미분류

(80)
윈도우 환경에서 플랫폼 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년 아무것도 모르고 거의 처음 투입되었던 프로젝트에서 개발하며 적었던 노트다. 노트 제목은 버그 사냥기라고 적었었다. 열심히 해 보려고 이것저것 기록하려고 했었는데, 뭐 만났던 문제를 다 적어던 건 아니지만, 어제 저녁에 우연히 다시 읽어보니 재미있었다. 좀 부끄러운 것도 있기는 한데, 재미도 있어서, 나의 기록으로 남겨본다.
[번역] 팩 디바이스-인디펜던트 비트맵 Windows Graphics Programming Win32 GDI and DirectDraw Feng Yuan Chapter 10 Bitmap Basics 10.1 Device-Independent Bitmap Formats Packed Device-Independent Bitmap The BMP file format is the format in which a DIB is stored in an independent disk file. We mentioned that a BMP file contains a file header, a bitmap information block, and a pixel array. The file header serves an information purpose dur..
Windows Job Object (ie와 acrd32 비교) 윈도우 잡 객체 중에 ie와 acrd32 의 객체를 비교해 봤다. 비교한 원본은 windbg 를 통해 뽑아본(윈도우즈인터널즈 참조) 내용이다.