Break Pointer ´Â INT 3 À¸·Î ÅëÇÑ´Ù!!


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 -