ãã€ã¯ãã«ãŒãã«ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒå¥åXameleon ChameleonïŒã®ã·ã¹ãã ã³ãŒã«ã®èª¬æã«æ³šç®ããŠãã ããã ç§ã®ã«ã¡ã¬ãªã³ã¯ãŸã åµããhatchåããŠããããä»®æ³ãã·ã³ã§åãåŸãŠããŸãã ãããã圌ã¯éåžžã«å€ç¬ã§ãããå°ããªãã«ã²ã¯Habrã®äœæ°ãç¥ãããã§ãã
ãå°æ žå¯Ÿã¢ããªã¹ãã®è°è«ã¯é·å¹Žç¶ããŠããŸããããåæ¹ã¯å°æ žã«åºã¥ããã·ã¹ãã ã®ã¢ãŒããã¯ãã£ã«ã€ããŠè°è«ããŠããŸããïŒ ãããããã®ãããã¯ã¯ããã€ã¯ãã«ãŒãã«ã·ã¹ãã ã®ã¢ãŒããã¯ãã£ã«ããããã®å ãåœãŠãã§ãããã
ãã®ææžã«ã¯é·ãæŽå²ããããŸã-ã«ã¡ã¬ãªã³ã«ããŸãã«ãå€ãã®æéãè²»ãããŠããããšã«æ°ä»ããåŸãã¡ã€ã³ã®ä»äºã§åé¡ãçºçããŸããã ãããã£ãŠã1ç³ã§2矜ã®é³¥ã殺ããã¬ããŒããžã§ãã¬ãŒã¿ãŒã宣äŒããèšäºãæžããæçµçã«ããã¥ã¡ã³ããäœæããããšã«ããŸããã æåã¯åœŒå¥³ã¯è±èªãåãããªãã£ãããããæç¹ã§æ¥ãããããããå°ãäžæãªãã·ã¢èªã«æžãçŽãããšã«æ±ºããã
å®éãããã¥ã¡ã³ãã®æ¹èšå±¥æŽïŒ
ããžãã¹ã«åãæãããã Chameleonãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ã次ã®ããã«è¡šç€ºã§ããŸãã
L4ãã¹ã¿ããªãã€ã¯ãã«ãŒãã«ã«åºã¥ããŠããŸãã ãã€ã¯ãã«ãŒãã«ã¯ãL4Kaãã¹ã¿ããªãã€ã¯ãã«ãŒãã«èªäœãšããŒã¹ã¡ã¢ãªãããŒãžã£ãŒL4 Sigma0ã®2ã€ã®ã¢ãžã¥ãŒã«ã§æ§æãããŠããŸãã ãã®ããã¥ã¡ã³ãL4ããŒãžã§ã³X.2ãªãã¡ã¬ã³ã¹ããã¥ã¢ã«ïŒææ°ã®ã¹ãããã·ã§ããã2010幎7æ19æ¥ïŒãããã¹ã¿ããªã®è©³çŽ°ãã芧ãã ããã
Chameleonãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ããã€ã¯ãã«ãŒãã«ã®äžã«ãããŸãã ã·ã¹ãã ã¯ããã€ã¯ãã«ãŒãã«ã®äžã§åäœããIPCïŒããã»ã¹ééä¿¡ïŒ-åæã¡ãã»ãŒãžã³ã°ãå®è£ ããç¹å®ã®ã·ã¹ãã ã³ãŒã«ãä»ããŠçžäºã«ãããã³ãã€ã¯ãã«ãŒãã«ãšå¯Ÿè©±ããããã€ãã®ããã»ã¹ã®åœ¢åŒã§ç·šæãããŸãã ã·ã¹ãã ã®åºæ¬çãªã«ãŒã«ã¯ãIPCã«åºã¥ããã¢ããªã±ãŒã·ã§ã³ãšã·ã¹ãã éã®çžäºäœçšã§ãïŒããã€ãã®äŸå€ã¯ãããŸãïŒã èŠæ±ã¿ã¹ã¯ã¯ç¹å¥ãªæ¹æ³ã§ã¡ãã»ãŒãžãçæããIPCãåŒã³åºããŸããIPCã¯ã¡ãã»ãŒãžãåä¿¡ã¿ã¹ã¯ã«éä¿¡ããŸãã äžéšã®IPCã¯ãå¿çãåä¿¡ããããŸã§ãããã¯ãããä»ã®IPCã¯åä¿¡åŽã«åãå ¥ãããããŸã§ãããã¯ãããŸãã åæã«ã¯ãã¡ãã»ãŒãžãæ£åžžã«éä¿¡ããããã®èŠä»¶ãââãããŸããåä¿¡åŽã¯ããããèãå¿ èŠããããŸãã ãã®ãããäžéšã®ã¿ã¹ã¯ã¯åžžã«ã¡ãã»ãŒãžãèãå¿ èŠããããŸãã ã«ã¡ã¬ãªã³ã®ãã®ãããªã¿ã¹ã¯ã¯ãã¹ãŒããŒãã€ã¶ãŒããã¡ã€ã«ã·ã¹ãã ããããã¯ãŒã¯ã¹ã¿ãã¯ãããã€ã¹ãã©ã€ããŒã§ãã ç§ãã¡ã«ãšã£ãŠæå ±ã¯ãã¡ãã»ãŒãžãåŸ ã£ãŠããç¶æ ã®ã¿ã¹ã¯ã¯ããã»ããµã®ã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãæ¶è²»ãããä»ã®ã¿ã¹ã¯ã«ãã®æéãè²»ãããŠãããšããäºå®ã§ãã ç§ãã¡ã«ãšã£ãŠæãèå³æ·±ãã®ã¯ãL4ã³ã³ã»ãããã¡ãã»ãŒãžã®éåä¿¡ã«1ã€ã®ããªããã£ãã䜿çšããããšã§ã-ããã¯IPCã¡ãã»ãŒãžã§ãã ã«ãŒãã«ã¬ãã«ã®ã¡ãã»ãŒãžã¯ã1ã€ã®ã·ã¹ãã ã³ãŒã«ã§æ§æãããŸããã·ã¹ãã ã³ãŒã«ã«ã¯ãéä¿¡ãã§ãŒãºãšåä¿¡ãã§ãŒãºã®ããã€ãã®çµã¿åããããããŸãã
ãã®ä»æ§ã§ã¯ã次ã®ããŒã¿åã«ã€ããŠèª¬æããŸããæåã®5ã€ã®åã¯ããã€ã¯ãã«ãŒãã«ã«ãã£ãŠè¡šãããŸãã
ããã§ã¯ãã«ã¡ã¬ãªã³-ã¹ãŒããŒãã€ã¶ãŒã®åºæ¬çãªãµãŒãã¹ã詳ããèŠãŠã¿ãŸãããã ãã€ã¯ãã«ãŒãã«ã®èŠ³ç¹ããèŠããšãã¹ãŒããŒãã€ã¶ãŒã¯æåã®ãŠãŒã¶ãŒã¿ã¹ã¯ã«éããªããããã¢ããªã±ãŒã·ã§ã³ããã°ã©ã ããµãŒãã¹ããŸãã¯ãã©ã€ããŒã§ããä»ã®ã¿ã¹ã¯ã¯ãKIPïŒã«ãŒãã«ã€ã³ã¿ãŒãã§ãŒã¹ããŒãž-L4ãã€ã¯ãã«ãŒãã«ã®åºæ¬æŠå¿µïŒãä»ããŠã¹ãŒããŒãã€ã¶ãŒã®ThreadIDãåä¿¡ã§ããŸãä»ã®ãµãã·ã¹ãã ã®ThreadIDïŒGetDeviceHandleã·ã¹ãã ã³ãŒã«ã䜿çšïŒã
ãªãœãŒã¹ç®¡çã®ããã®22ã®ã·ã¹ãã ã³ãŒã«ã ããã¯ãä»®æ³ã¡ã¢ãªã®å²ãåœãŠãšè§£æŸãã¡ã¢ãªå ã§äºåã«æºåãããããã»ã¹ã®éå§ããã©ã€ããŒ/ãããã³ã«å®è£ ã®å®è¡ãããã»ã¹ãžã®ä¿¡å·ã®éä¿¡ãããã°ã©ã ã¹ã¬ããïŒå®è¡ã¹ã¬ããïŒã®äœæãããã»ã¹ã®å®äºãåŸ æ©ãããã»ã¹ã¿ã€ããŒã®èšå®ããã®ä»ã®ããã€ãã®æ©èœãå®è¡ããã®ã«ååã§ãã
ã·ã¹ãã ã³ãŒã«ã®ããã€ãããã詳现ã«æ€èšããŠãã ããã ã¹ãŒããŒãã€ã¶ã¯æ°ããããã»ã¹ãèµ·åã§ããããããã®ããã»ã¹ã®ã¡ã¢ãªãäºåã«æºåããå¿ èŠããããŸãã ãããã£ãŠãæ°ããããã»ã¹ãå®è¡ããåã«é 眮ããã¡ã¢ãªãããã¯ãå¿ èŠã§ãã 次ã®ã·ã¹ãã ã³ãŒã«ã䜿çšããŠãããã»ã¹ã®ã¡ã¢ãªãèŠæ±ã§ããŸãã
äžã§èšã£ãããã«ãããã¥ã¡ã³ãã®æåã®ããŒãžã§ã³ã¯å£ããè±èªã§ããã æ®å¿µãªãããä»æ§å šäœããã·ã¢åããããšãã§ããªãã£ããããã¡ãã»ãŒãžæ¬æã®èª¬æã¯ãè©æ¬ºãã®ãŸãŸã§ããã
å°çšã¡ã¢ãªãæäœããããã®å¯Ÿç§°ã·ã¹ãã ã³ãŒã«ã¯ãReferencingSegmentãšåŒã°ããŸãã 以åã«å²ãåœãŠãããã¡ã¢ãªã»ã°ã¡ã³ãã解æŸããã«ã¯ãReferencingSegmentåŒã³åºãã䜿çšããŠããã®ã»ã°ã¡ã³ãã®åç §ã«ãŠã³ã¿ããªã»ããããå¿ èŠããããŸãã åæã«ãã»ã°ã¡ã³ãèªäœãšã»ã°ã¡ã³ããå æããä»®æ³ã¡ã¢ãªã®ããŒãžã¯ãAllocateSegmentã䜿çšããåŸç¶ã®å²ãåœãŠã«äœ¿çšã§ããŸãã
ããã»ã¹ã¯ãExitProcessåŒã³åºãã䜿çšããŠèªèº«ãçµäºãããããšãã§ããŸãã
åã®ã¡ãã»ãŒãžãšã¯ç°ãªãããã®ã¡ãã»ãŒãžã«ã¯åä¿¡ãã§ãŒãºããããŸããã ããã¯ããã®ã¡ãã»ãŒãžã®éä¿¡åŸã«ããã»ã¹ãçµäºãããããã¹ãŒããŒãã€ã¶ãŒã¯ç¢ºèªå¿çãéä¿¡ããªãããã§ãã ã¡ãã»ãŒãžã¯ãæ»ãã³ãŒããšãã1ã€ã®ãã©ã¡ãŒã¿ãŒãæž¡ããŸãã ãã®ã³ãŒãã¯ãProcessWaitã·ã¹ãã ã³ãŒã«ã䜿çšããŠããã»ã¹ã®å®äºãåŸ æ©ããŠããã¿ã¹ã¯ã«æž¡ãããŸãã
IPCãã€ã¯ãã«ãŒãã«ã¯åæåŒã³åºãã䜿çšãããããå€ãã®å Žåããã«ãã¹ã¬ããã䜿çšããããšã§åæã®å¶éãåé¿ã§ããŸãã ã©ã®ããã»ã¹ã§ãããã®ã¢ãã¬ã¹ç©ºéã«ããã°ã©ã ã¹ã¬ããïŒå®è¡ã¹ã¬ããïŒãäœæã§ããŸãã ãã®å Žåããã¹ãŠã®ã¹ã¬ããã¯å ±éã®ãªãœãŒã¹ãå ±æããŸãã 次ã®ã·ã¹ãã ã³ãŒã«ã¯ãæ°ããããã°ã©ã ã¹ã¬ãããäœæããŸãã
ã¹ã¬ãããäœæãããå Žåãããããåæ¢ããŠãªãœãŒã¹ã解æŸããæ¹æ³ãå¿ èŠã§ãã ãããè¡ãã«ã¯ãExitThreadã·ã¹ãã ã³ãŒã«ã䜿çšããŸãã
ã¡ãã£ãšãããŠãŒã¢ã¢ïŒãã«ã¡ã¬ãªã³ã·ã¹ãã ãšã¢ã¡ãŒãã®ããã»ã¹ã«ã¯å ±éç¹ããããŸãããããã¯é€ç®ã«ãã£ãŠå¢å ããŸããã çå£ã«ããã®å Žåãèªè»¢è»ã¯çºæãããŠããããPOSIX forkïŒïŒãåºç€ãšããŠæ¡çšãããŸããïŒ
L4ããªããã£ãã«åºã¥ãforkïŒïŒé¢æ°ã®å®è£ ã¯ç°¡åã§ã¯ãããŸããããå®è¡å¯èœãªã¿ã¹ã¯ã§ãã ãã®åŒã³åºãã®ç¹åŸŽã¯ã1ã€ã®ããã»ã¹ã«ãã£ãŠåŒã³åºããã2ã€ã®ããã»ã¹ãå¿çãåãåãããšã§ããåŒã³åºãå ããã»ã¹ãšãæ°ããäœæãããåŒã³åºãå ããã»ã¹ã®ã³ããŒã§ãã ãã¡ãããã€ãã·ãšãŒã¿ãŒãšãã®ã³ããŒã®äž¡æ¹ã®ããã»ã¹ã¯ãç°ãªãã¢ãã¬ã¹ç©ºéã§å®è¡ãããŸãã
ãã®ããã»ã¹ã¯ããèªäœãè€è£œããããšãã§ããèå³æ·±ã課é¡ã«çŽé¢ããŸã-æºåãããã€ã¡ãŒãžããæ°ããã¿ã¹ã¯ãäœæããŸãã MR2ïŒã¡ãã»ãŒãžã¬ãžã¹ã¿2ïŒã«æ³šæããŠãã ãã-å®è¡äžã®ããã»ã¹ã®ã¡ã¢ãªãããã¯ã«ãã³ãã«ã転éããŸãã ãã®ã¡ã¢ãªãããã¯ã¯ãäžèšã®AllocateSegmentã·ã¹ãã ã³ãŒã«ã䜿çšããŠäœæããå¿ èŠããããéå§ããããã»ã¹ã®æºåæžã¿ã€ã¡ãŒãžãããã«ä¿åããå¿ èŠããããŸãã ã·ã¹ãã ã³ãŒã«ã¯ãããã»ã¹ã®åºæ¬ãã©ã¡ãŒã¿ãŒïŒãšã³ããªãã€ã³ããã³ãŒãã»ã°ã¡ã³ãã®éå§ãšãµã€ãºãããŒã¿ãšBSSïŒãèšå®ããŸãã
ExecProcessã¡ãã»ãŒãžã§æž¡ãããæåŸã®2ã€ã®ãã©ã¡ãŒã¿ãŒã«æ³šæããŠãã ããã äžèšã§ãŸã 説æãããŠããªãããŒã¿å-è€åã衚瀺ãããŸãã ã¡ãã»ãŒãžæ¬æã§éä¿¡ãããã®ã¯èŠçŽ èªäœã§ã¯ãªããèšè¿°åã§ãã ExecProcessã¡ãã»ãŒãžã®å Žåããããã®èšè¿°åã¯2ã€ã®ã¡ã¢ãªãããã¯ãæããŸã-æåã®ã¡ã¢ãªãããã¯ã¯char ** argvãæž¡ãã2çªç®ã®ã¡ã¢ãªãããã¯ã¯char ** envpãæž¡ããŸã-é¢æ°int mainãžã®åŒæ°ã®é¡äŒŒç©ïŒint argcãchar ** argvãchar ** envpïŒ ã
ã¹ãŒããŒãã€ã¶ã¯åºæ¬çãªãµãŒãã¹ã§ãããä»ã®ç»é²æžã¿ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã ããšãã°ãã¿ã¹ã¯ã¯ããã¡ã€ã«ã·ã¹ãã ã䜿çšããã«ãã·ãªã¢ã«ããŒããã©ã€ããŒãçŽæ¥äœ¿çšããããšèããŠããŸãã GetDeviceHandleã·ã¹ãã ã³ãŒã«ã䜿çšããŠãç»é²æžã¿ã·ãªã¢ã«ããŒããã©ã€ããŒã®ThreadIdã確èªã§ããŸãã
GetDeviceHandleåŒã³åºãã§åä¿¡ããThreadIDããã»ã¹èå¥åã䜿çšããŠãã¡ãã»ãŒãžãéä¿¡ããããå¿çãåä¿¡ãããã§ããŸãã ã¡ãã»ãŒãžã®åœ¢åŒã¯ããã€ã¹ã®ã¿ã€ãã«ãã£ãŠç°ãªãã次ã®ãããã³ã«ã®ããããã§èšè¿°ã§ããŸãã
- ãµãŒãã¹ãšã®äº€æã®åœ¢åŒã
- ãããã¯ããã€ã¹ãšã®äº€æãã©ãŒãããã
- æå亀æãã©ãŒãããã
- ãããã¯ãŒã¯ããã€ã¹ãšã®åœ¢åŒã®äº€æã
次ã®ãªã³ã¯ãããPDF圢åŒã®å®å šãªïŒã¢ã«ãã¡çåã®ïŒããŒãžã§ã³ã®ä»æ§ãããŠã³ããŒãããŠãã ããïŒ ãããã³ã«ãã¡ããªã®Xameleonä»æ§ ãã®ããã¥ã¡ã³ãã¯ãŸã éåžžã«æªå å·¥ã§ãããããªãã®ã³ã¡ã³ãããããªãä¿®æ£ã«åãäžããããšãé¡ã£ãŠããŸãã
ã·ã¹ãã ã³ãŒã«ã«ã€ããŠè©±ãåããæ確ã«ãããšã©ãŒã瀺ããHabréã ãã§ãªãããã®ããŒãžã§ã質åãããããšãã§ããŸãïŒ fotki.yandex.ru/users/almandrykin/album/164974-åçãéžæããŠã³ã¡ã³ãæ¬ã§è³ªåããŠãã ããã
ããã€ãã®ã¹ãŒããŒãã€ã¶ã·ã¹ãã ã³ãŒã«ã®èª¬æã§ããã倧ããããããšãèµ·ãããŸããã é¢å¿ãããå Žåã¯ãã¹ãŒããŒãã€ã¶ãŒã®æ®ãã®ã·ã¹ãã ã³ãŒã«ãããã³Falovayaã·ã¹ãã ã®ã·ã¹ãã ã³ãŒã«ã®èª¬æããããã¯ãŒã¯ãµãã·ã¹ãã ããããã¯ãã·ã³ããªãã¯ãããã³ãããã¯ãŒã¯ããã€ã¹ãã©ã€ããŒãžã®ã·ã¹ãã ã³ãŒã«ã説æããããšãã§ããŸãã
æåŸã«ãã«ã¡ã¬ãªã³ã·ã¹ãã çšã®ããã°ã©ã ãäœæããããã«äœ¿çšã§ããéçºããŒã«ã«ã€ããŠèª¬æããŸãã éçºã§ã¯ãgccãg ++ãVisual C ++ãããŸããŸãªPascalã³ã³ãã€ã©ãªã©ãElfãŸãã¯PE圢åŒã§å®è¡å¯èœãã¡ã€ã«ãäœæã§ããããã°ã©ãã³ã°èšèªã䜿çšã§ããŸãã äžè¬ã«ãã³ã³ãã€ã«ããã»ã¹ã¯ä»ã®ã·ã¹ãã ã§ã®ã³ã³ãã€ã«ãšäŒŒãŠããŸãããäž»ãªã«ãŒã«ã¯ã³ã³ãã€ã©ã«ä»å±ããæšæºã©ã€ãã©ãªã䜿çšããªãããšã§ãã çŸåšã®Chameleonã®å®è£ ã§ã¯ãå ã®ElfããŒã¹ã®libcãšå ã®crt0ã䜿çšããŠãPOSIXé¢æ°ã®ãµãã»ãããæäŸããŠããŸãã PEã³ãŒãã®ãªããžã§ã¯ãã³ãŒããçæããã³ã³ãã€ã©ã§ãã®libcãã³ã³ãã€ã«ããã³ã³ãã€ã©ã§MS Visual C ++ããã°ã©ã ãã³ã³ãã€ã«ããããšã劚ãããã®ã¯ã»ãšãã©ãããŸããã Pascalã§ã·ã¹ãã ã³ãŒã«ãå®è£ ããããšãã§ããŸããããã®èšèªã¯ã·ã¹ãã ããã°ã©ãã³ã°çšã«èšèšãããŠããªããšããããšã¯èª°ãèšããŸããã
psããã¥ã¡ã³ãã®äœææã«ãFastReportã¬ããŒããžã§ãã¬ãŒã¿ãŒã䜿çšãããŸããã
ppsç§ã®è±èªã¯æ¬åœã«æªãã§ãã ãäžè©±ã«ãªã£ãŠãã ããã ææžå šäœããã·ã¢èªã«ç¿»èš³ããããšãçŽæããŸãã