³ª. ¿ÀÇÁ¼Â

¿©±â¼­ Àá½Ã ½Ç½ÀÀ» Áß´ÜÇÏ°í ¿ÀÇÁ¼Â(Offset)À̶ó´Â ¿ë¾î¿¡ ´ëÇØ »ý°¢Çغ¸ÀÚ. ¿ÀÇÁ¼ÂÀ̶ó´Â ¸»Àº »ç½Ç ±²ÀåÈ÷ Àü¹®ÀûÀÎ ¿ë¾îÀε¥ ÀÌ ¿ë¾î¿¡ ´ëÇÑ °³³äÀÌ Çò°¥¸®¸é Äڵ带 ÀÌÇØÇÏ´Â µ¥ »ó´çÇÑ ¿ÀÇØ°¡ ÀÖÀ» °Í °°´Ù. ¿ÀÇÁ¼ÂÀ̶õ ¡®¾î¶² ±âÁØ ¹øÁö¿¡¼­ºÎÅÍÀÇ »ó´ëÀûÀÎ °Å¸®¡¯¶ó´Â ¶æÀÌ´Ù. ÁÖ·Î Æ÷ÀÎÅÍ¿Í ÇÔ²² »ç¿ëµÇ¸ç Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ½ÃÀÛ ¹øÁö(Base)¿¡¼­ºÎÅÍ ¾ó¸¶³ª ¶³¾îÁ® Àִ°¡¸¦ Ç¥ÇöÇÒ ¶§ ¿ÀÇÁ¼ÂÀ̶ó´Â ¸»À» ¾´´Ù.

¿¹¸¦ µé¾î TCHAR *ptrÀÌ 1234¹øÁö¸¦ °¡¸®Å°°í ÀÖÀ» ¶§ 1238¹øÁö´Â ptr°ú ¿ÀÇÁ¼Â 4¸¸Å­ ¶³¾îÁ® ÀÖ´Ù°í Ç¥ÇöÇÑ´Ù. ptrÀ» ¹è¿­À̶ó°í ÇßÀ» ¶§ ¹è¿­ÀÇ Ã·ÀÚ°¡ ¹Ù·Î ¿ÀÇÁ¼ÂÀÌ µÇ¸ç 1238¹øÁö´Â ptr[4]·Î ÀÐÀ» ¼ö ÀÖ´Ù. ±×·¸´Ù¸é int *ptrÀÌ 1234¹øÁö¸¦ °¡¸®Å°°í ÀÖÀ» ¶§ 1238¹øÁöÀÇ ¿ÀÇÁ¼ÂÀº ¾ó¸¶°¡ µÇ°Ú´Â°¡? 4°¡ ¾Æ´Ï¶ó 1ÀÌ´Ù. ¿Ö³ÄÇϸé Á¤¼öÇüÀº Å©±â°¡ 4¹ÙÀÌÆ®À̱⠶§¹®ÀÌ´Ù. ÀÌ °æ¿ì 1238¹øÁö´Â ptr[1]·Î ¹Ù·Î Àаųª ¾µ ¼ö ÀÖ´Ù. ¿ÀÇÁ¼ÂÀ̶õ ´Ü¼øÈ÷ ¸î ¹ÙÀÌÆ® ¶³¾îÁ® Àִ°¡ ¸¸À» ³ªÅ¸³»´Â °ÍÀÌ ¾Æ´Ï¶ó ±âÁØ ¹øÁö¿¡¼­ºÎÅÍ ¿ÀÇÁ¼Â À§Ä¡±îÁö ¸î °³ÀÇ °ªÀÌ µé¾î Àִ°¡¸¦ ³ªÅ¸³½´Ù.

ApiEditÀÇ off º¯¼öµµ ¸¶Âù°¡Áö·Î ±âÁØ ¹øÁö buf·ÎºÎÅÍÀÇ »ó´ëÀûÀÎ °Å¸®¸¦ ³ªÅ¸³»¸ç ÀÌ °ªÀÌ °ð ÇöÀç ÆíÁýÁßÀÎ ¹®ÀÚÀÇ À§Ä¡°¡ µÈ´Ù. buf´Â TCHARÀÇ ¹è¿­À̹ǷΠoff´Â °ð buf·ÎºÎÅÍÀÇ ¹ÙÀÌÆ® ¼ö¶ó ÇÒ ¼ö ÀÖ´Ù. off°¡ ÇöÀç 12¶ó¸é ÀÌ´Â ÅؽºÆ® ¹öÆÛÀÇ Ã³À½ºÎÅÍ 12¹ÙÀÌÆ®¸¸Å­ ¶³¾îÁø ¹øÁö¶ó´Â ¶æÀÌ¸ç ½ÃÀÛ ¹øÁö¿¡¼­ºÎÅÍ off±îÁö 12°³ÀÇ ¹®ÀÚ(ÇѱÛÀº Àý¹Ý)°¡ ´õ ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ¿ÀÇÁ¼ÂÀº °Å¸®ÀÇ °³³äÀ̱⠶§¹®¿¡ µ¥ÀÌÅÍÇüÀº Á¤¼öÇüÀÌ´Ù. À½¼ö ¿ÀÇÁ¼Âµµ ¹®¹ýÀûÀ¸·Î °¡´ÉÇϱâ´Â ÇÏÁö¸¸ ½ÇÁúÀûÀÎ Àǹ̴ ¾øÀ¸¹Ç·Î ¿ÀÇÁ¼ÂÀº 0À» Æ÷ÇÔÇÑ ¾çÀÇ Á¤¼ö¶ó°í ÇÒ ¼ö ÀÖ´Ù.

¹®ÀÚ¿­ ¹öÆÛ¸¦ ´Ù·ê ¶§ Æ÷ÀÎÅ͸¦ ¹Ù·Î ¾²Áö ¾Ê°í ¿ÀÇÁ¼ÂÀ» »ç¿ëÇÏ´Â ÀÌÀ¯´Â ¾Æ¹«·¡µµ Á¤¼öÇüÀÌ ÈξÀ ´õ ´Ù·ç±â Æí¸®Çϱ⠶§¹®ÀÌ´Ù. ÇÔ¼ö¸¦ ¼³°èÇÒ ¶§³ª µð¹ö±ëÇÒ ¶§ 0x20c8ef3a °°Àº Æ÷ÀÎÅ͸¦ Àд °Í°ú 136 °°Àº Á¤¼ö¸¦ Àд °Í Áß ¾î¶² °ÍÀÌ ´õ ½±°Ú´Â°¡? buf°¡ °¡¸®Å°´Â ¹øÁö´Â »óȲ¿¡ µû¶ó ´Þ¶óÁú ¼ö ÀÖÁö¸¸ ¿ÀÇÁ¼ÂÀº buf·ÎºÎÅÍÀÇ °Å¸®À̹ǷΠbuf°¡ ¾î¶² ¹øÁö¿¡ ÇÒ´çµÇ´õ¶óµµ Ç×»ó ÀÏÁ¤ÇÏ¸ç µû¶ó¼­ Äڵ带 ºÐ¼®Çϰųª ¹ö±×¸¦ ÀâÀ» ¶§ Ç×»ó µ¿ÀÏÇÑ Çö»óÀ» ¸ñ°ÝÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ GetLine, GetOffFromRC °°Àº ÇÔ¼öµéÀÌ ¹®¼­»óÀÇ À§Ä¡¸¦ Àü´ÞÇÏ°í °è»êÇÒ ¶§ ¿ÀÇÁ¼ÂÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù.

¿ÀÇÁ¼ÂÀº ¾îµð±îÁö³ª buf·ÎºÎÅÍÀÇ °Å¸®¿¡ ºÒ°úÇϹǷΠÀÌ À§Ä¡¿¡ ÀÖ´Â ¹®ÀÚ¸¦ Àаųª º¯°æÇÒ ¶§´Â Æ÷ÀÎÅÍ·Î ¹Ù²Ù¾î¾ß ÇÑ´Ù. ¹Ý´ë·Î ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖ´Â ÇÔ¼öÀÇ Àμö¸¦ ±¸Çϱâ À§ÇØ ¹®ÀÚÀÇ ¹øÁö·ÎºÎÅÍ ¿ÀÇÁ¼ÂÀ» °è»êÇØ ³»¾ß ÇÒ ¶§µµ ÀÖ´Ù. ¿ÀÇÁ¼ÂÀº ¾ðÁ¦µçÁö Æ÷ÀÎÅÍ°¡ µÉ ¼ö ÀÖ°í Æ÷ÀÎÅÍ´Â ¶ÇÇÑ ¾ðÁ¦µçÁö ¿ÀÇÁ¼ÂÀ¸·Î ¹Ù²Ü ¼ö ÀÖ´Ù.

¿ÀÇÁ¼ÂÀ» Æ÷ÀÎÅÍ·Î ¹Ù²Ù·Á¸é ±âÁØ ¹øÁö¿¡ ¿ÀÇÁ¼ÂÀ» ´õÇÏ¸é µÈ´Ù. Áï offÀ§Ä¡ÀÇ ¹®ÀÚ¸¦ ÀÐÀ¸·Á¸é buf+offÀÇ ¹øÁö¸¦ ÀÐÀ¸¸é µÈ´Ù. ¶Ç´Â buf[off]·Î ¹Ù·Î ¹®ÀÚ¸¦ ÀÐÀ» ¼öµµ ÀÖÀ¸¸ç ÀÌ´Â *(buf+off)¿Í µ¿ÀÏÇÑ Ç¥Çö½ÄÀÌ´Ù. Æ÷ÀÎÅÍ¿¡ Á¤¼ö¸¦ ´õÇÏ¸é °á°ú°ªÀº Æ÷ÀÎÅÍ°¡ µÇ¹Ç·Î ±âÁØ ¹øÁö¿¡ ¿ÀÇÁ¼ÂÀ» ´õÇÑ °ªÀº °ð ±âÁØ ¹øÁö¿¡¼­ ¿ÀÇÁ¼Â¸¸Å­ ¶³¾îÁø ¹øÁö¸¦ °¡¸®Å°°Ô µÈ´Ù.

Æ÷ÀÎÅ͸¦ ¿ÀÇÁ¼ÂÀ¸·Î ¹Ù²Ù·Á¸é Æ÷ÀÎÅÍ¿¡¼­ ¿ÀÇÁ¼ÂÀÇ ±âÁØ ¹øÁö¸¦ »©¸é µÈ´Ù. ´Ü ÀÌ ½ÄÀÌ Àǹ̰¡ ÀÖÀ¸·Á¸é Æ÷ÀÎÅÍ´Â ±âÁØ ¹øÁöº¸´Ù ´õ µÚÂÊ¿¡ ÀÖ¾î¾ß ÇÑ´Ù. Æ÷ÀÎÅÍ pÀÇ ¿ÀÇÁ¼ÂÀ» ±¸ÇÏ·Á¸é p-buf½ÄÀ¸·Î ±¸ÇÒ ¼ö Àִµ¥ ÀÌ ½ÄÀº ÀÌ¹Ì GetLine ÇÔ¼ö¿¡¼­ ¿©·¯ ¹ø »ç¿ëÇß´Ù. GetLineSub ÇÔ¼ö°¡ ±¸ÇÑ ÁÙ ³¡ ¹øÁö p¸¦ ÁÙÀÇ ³¡ ¿ÀÇÁ¼ÂÀ¸·Î ¹Ù²Ù±â À§ÇØ e=p-buf; ½ÄÀ¸·Î ¿ÀÇÁ¼ÂÀ» ±¸Çß´Ù. ÀÌ ½ÄÀÌ °¡´ÉÇÑ ÀÌÀ¯´Â Æ÷ÀÎÅÍ¿¡¼­ Æ÷ÀÎÅ͸¦ »©¸é °á°ú°ªÀº Á¤¼ö°¡ µÇ¸ç µû¶ó¼­ Á¤¼öÇü º¯¼ö e°¡ ÀÌ °ªÀ» ´ëÀÔ¹ÞÀ» ¼ö Àֱ⠶§¹®ÀÌ´Ù.

°¢°¢ÀÇ ÇÔ¼ö°¡ ¿ä±¸ÇÏ´Â ÀμöÀÇ ÇüÅ°¡ ´Ù¸£±â ¶§¹®¿¡ ¿ÀÇÁ¼Â°ú Æ÷ÀÎÅÍ »çÀ̸¦ ÀÚÀ¯·Ó°Ô ÀüȯÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ÇÑ±Û ¹®ÀÚÀÎÁö Á¶»çÇÏ´Â IsDBCS ÇÔ¼ö´Â ¿ÀÇÁ¼ÂÀ» Àμö·Î ¿ä±¸Çϴµ¥ ¸¸¾à p¹øÁö¿¡ ÀÖ´Â ¹®ÀÚ°¡ ÇѱÛÀÎÁö ¾Ë°í ½Í´Ù¸é p¸¦ ¿ÀÇÁ¼ÂÀ¸·Î ¹Ù²Ù¾î¼­ IsDBCS(p-buf)¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. Insert ÇÔ¼ö´Â »ðÀÔ À§Ä¡¸¦ nPos ¿ÀÇÁ¼ÂÀ¸·Î Àü´Þ¹ÞÁö¸¸ memmove ÇÔ¼ö´Â Æ÷ÀÎÅ͸¦ ¿ä±¸ÇϹǷΠbuf+nPos·Î »ðÀÔ À§Ä¡¸¦ Æ÷ÀÎÅÍ·Î ¹Ù²Ù¾î¾ß ÇÑ´Ù.

¾ÕÀ¸·ÎÀÇ Äڵ忡¼­´Â ÀÌ·± Æ÷ÀÎÅÍ¿Í ¿ÀÇÁ¼Â°£ÀÇ º¯È¯ÀÌ ´õ ÀÚÁÖ ³ª¿Ã °ÍÀÌ¸ç ¾ÆÁÖ ´ç¿¬ÇÑ µíÀÌ »ç¿ëÇÒ °ÍÀÌ´Ù. ¸¸¾à Áö±Ý ¿ÀÇÁ¼Â°ú Æ÷ÀÎÅÍ°£ÀÇ º¯È¯ÀÌ ¾î·Æ´Ù°í ´À²¸Áø´Ù¸é ¾ÆÁ÷ C ¾ð¾î¿¡ ´ëÇÑ °øºÎ°¡ ºÎÁ·ÇÏ´Ù°í »ý°¢Çϸé Ʋ¸²¾ø´Ù.