|
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 - |