수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1694441
  • Today | 186
  • Yesterday | 606

Programming/Win32 API2007/02/22 10:58

Break Pointer 는 INT 3 으로 통한다!!

원본 : http://www.debuglab.com/knowledge/int3.html

1.요약

INT 3 이라는 어셈블리 코드를 사용하여 사용자가 임의로 break pointer 를 추가해 보도록 하겠습니다.


2.본문

break pointer 는 특정 부분을 디버깅할때 사용하는 아주 유용한 툴(?)입니다. 그런데 디버깅을 단순히 사용하는데에 그치지 않고 break pointer 를 디버거가 어떻게 구현하는지 알아보기로 하겠습니다. 우선 디버거가 break pointer 를 구현할때에는 해당 라인에 INT 3 이라는 값을 넣어 둡니다. 그러면 INT 3 이라는 값이 이미 CPU 에서 break pointer 라고 정의되어 있기 때문에 디버거에 메세지가 날라와서 디버거가 그 메세지를 가지고 사용자에게 상태값들을 보여줄 수 있는 것이지요. 그럼 INT 3 이라는 값을 사용하여 맘대로 break pointer 를 걸어둘수는 없을까요? 네. 실제로 간단합니다.

그럼 구체적으로 살펴보기 위해서 우선 간단한 Console project 를 만들어 보시기 바랍니다.

그리고 나서 아래의 코드와 같이 입력하시고

int main(int argc, char* argv[]) 

{ 

    int a; 

    

    a = 10;    // 이곳에 Break pointer 를 걸어둡니다. (F9 키) 

    

    printf("Hello World!\n"); 

    return 0; 

} 

자... 그리고 프로그램을 실행해보세요.

그럼 프로그램이 a = 10; 에서 멈추겠지요?

그런데 이 부분을 아래와 같이 고쳐보기로 합시다.

int main(int argc, char* argv[]) 

{ 

    int a; 

    

    // a 의 값을 알고 싶기 때문에 

    // 여기에 break pointer 를 넣고 싶습니다. 

    

    __asm 

    { 

        INT 3 

    } 

    

    a = 10; 

    

    

    printf("Hello World!\n"); 

    return 0; 

} 

자 그럼 어떻게 될까요? a = 10; 앞에 assembly 코드로 INT 3 이라는 값을 넣었죠? 그럼 디버거는 사용자가 임의로 break pointer 를 걸어놓았다는 메세지와 함께 해당 프로세스를 멈춥니다..

실제로 해보세요.. 참고로 위에서 __asm {} 은 어셈블리 코드를 사용하겠다는 의미입니다.

그럼 여기에 머물지 말고 위의 코드를 보다 더 다양하게 사용하기 위한 방법을 알아볼까요?

위의 Break pointer 를 define 상수로 표현하면 훨씬 더 효과적이겠네요.^^.

#ifdef USER_DEBUG 



// BREAK_POINTER 로 정의합니다. 

#define BREAK_POINTER __asm \ 

{ \ 

INT 3 \ 

} \ 



#endif 





int main(int argc, char* argv[]) 

{ 

    int a; 

    

    // a 의 값을 알고 싶기 때문에 

    // 여기에 break pointer 를 넣고 싶습니다. 

    

#ifdef USER_DEBUG 

    BREAK_POINTER 

#endif 

        

        a = 10; 

    

    

    printf("Hello World!\n"); 

    return 0; 

} 



위의 코드를 입력하고 실행하면 어떻게 될까요? 네 물론 break pointer 가 걸리지 않습니다. 이유는 USER_DEBUG 라는 상수가 정의 되어 있지 않기 때문인데요.

#include "stdafx.h" 밑에

#define USER_DEBUG

라고 입력하시고 프로그램을 실행해 보세요..

그럼 어떻게 되죠? 네.. 그렇습니다. user break pointer 가 걸립니다.

재밌죠?

이제 여러분은 디버깅을 하기 위해서 특정 부분에 위의 함수를 넣어두고, USER_DEBUG 를 선언하거나 선언하지 않음으로써 break pointer 를 막을 수 있게 되었습니다.


3.예제

// 전체 소스 

// Break.cpp : Defines the entry point for the console application. 

// 



#include "stdafx.h" 



#define USER_DEBUG 



#ifdef USER_DEBUG 

// BREAK_POINTER 로 정의합니다. 

#define BREAK_POINTER __asm \ 

{ \ 

INT 3 \ 

} \ 



#endif 



inline void BreakPointer() 

{ 

#ifdef USER_DEBUG 

    BREAK_POINTER 

#endif 

} 





int main(int argc, char* argv[]) 

{ 

    int a; 

    

    // a 의 값을 알고 싶기 때문에 

    // 여기에 break pointer 를 넣고 싶습니다. 

    

    BreakPointer(); 

    

    a = 10; 

    

    

    printf("Hello World!\n"); 

    return 0; 

} 



- 2001.08.13 Smile Seo -
"Win32 API" 카테고리의 다른 글
  • 바탕화면, 즐겨찾기, 내 문서 등의 패스얻기 (0)2007/02/28
  • 화면 보호기 제어하기 (0)2007/02/28
  • Break Pointer 는 INT 3 으로 통한다!! (0)2007/02/22
  • 화면 캡쳐 소스 (0)2007/02/22
  • SearchPath()의 리턴값 알아보기 (0)2007/02/22
2007/02/22 10:58 2007/02/22 10:58
Posted by webdizen
Tags breakpoint
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2630

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 618 619 620 621 622 623 624 625 626 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 작업표시줄
  • 포스팅
  • 돌체 노벨라
  • 심리 테스트
  • tty
  • 코드 보안
  • putty
  • Debugging Trace Macro
  • firefox2.0
  • Optimizer
  • 육감 기술
  • WF
  • 프로그램 중복 실행 방지
  • 캡슐카
  • Message
  • Templates
  • Browsing
  • 로그
  • JsUnit
  • php.MVC

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.