锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 久久综合九色综合久99,亚洲第一极品精品无码久久 ,亚洲欧美一级久久精品http://www.shnenglu.com/codeart/category/14768.htmlcodeArtzh-cnSun, 07 Nov 2010 06:26:18 GMTSun, 07 Nov 2010 06:26:18 GMT60RAII鏄粈涔堬紵鏉ユ簮浜庨噾搴嗙殑涓撴爮http://www.shnenglu.com/codeart/archive/2010/11/06/132675.htmlcodeArtcodeArtSat, 06 Nov 2010 09:30:00 GMThttp://www.shnenglu.com/codeart/archive/2010/11/06/132675.htmlhttp://www.shnenglu.com/codeart/comments/132675.htmlhttp://www.shnenglu.com/codeart/archive/2010/11/06/132675.html#Feedback0http://www.shnenglu.com/codeart/comments/commentRss/132675.htmlhttp://www.shnenglu.com/codeart/services/trackbacks/132675.html鎽樿嚜銆奅xtended STL銆嬩腑璇?/p>


RAII錛氳祫婧愯幏鍙栧嵆鍒濆鍖?/h1>

璧勬簮鑾峰彇鍗沖垵濮嬪寲錛圧AII, Resource Acquisition Is Initialization錛夋槸鎸囷紝褰撲綘鑾峰緱涓涓祫婧愮殑鏃跺欙紝涓嶇榪欎釜璧勬簮鏄璞°佸唴瀛樸佹枃浠跺彞鏌勬垨鑰呭叾瀹冧粈涔堬紝浣犻兘浼氬湪涓涓璞$殑鏋勯犲嚱鏁頒腑鑾峰緱瀹冿紝騫朵笖鍦ㄨ瀵硅薄鐨勬瀽鏋勫嚱鏁頒腑閲婃斁瀹冦傚疄鐜拌繖縐嶅姛鑳界殑綾伙紝鎴戜滑灝辮瀹冮噰鐢ㄤ簡"璧勬簮鑾峰彇鍗沖垵濮嬪寲錛圧AII錛?鐨勬柟寮忋傝繖鏍風殑綾誨父甯歌縐頒負灝佽綾匯?/p>

鍙互渚濇嵁璧勬簮鍙彉鎬у拰璧勬簮鏉ユ簮榪欎袱涓壒寰侊紝鏉ュRAII榪涜鍒嗙被銆?/p>


璧勬簮鍙彉鎬?/h2>

濡傛灉涓涓皝瑁呯被瀵瑰叾瀹炰緥鎻愪緵棰濆鐨勫姛鑳斤紝浣垮緱鍏跺疄渚嬭兘琚祴浜堟柊璧勬簮錛岃繖涓被琛ㄧ幇鍑虹殑榪欑鐗瑰緛鍗崇О涓?鍙彉鐨凴AII"錛屽惁鍒欏氨鏄?涓嶅彲鍙樼殑RAII"銆?/p>

涓嶅彲鍙樼殑RAII錛屾槸浣跨敤璧鋒潵鏈綆鍗曠殑涓縐嶃傝瀹冪畝鍗曪紝鏄洜涓哄湪榪欑鎯呭喌涓嬶紝鏃犻渶鍦ㄥ皝瑁呯被涓彁渚涚敤浜庢寚瀹氳祫婧愮殑鏂規硶--涓嶇鏄柊鍒嗛厤鐨勮祫婧愶紝榪樻槸瀵瑰叾浠栬祫婧愯繘琛屾嫹璐濄傝繖縐峈AII榪樻剰鍛崇潃錛岀被鐨勬瀽鏋勫嚱鏁版繪槸鍙互鍋囧畾錛岃灝佽鐨勮祫婧愭槸鏈夋晥鐨勩?/p>

涓庢鐩稿弽錛屾彁渚涘彲鍙樼殑RAII鐨勭被錛屽氨闇瑕佸疄鐜頒笅鍒楀姛鑳戒腑鐨勭粷澶ч儴鍒嗭紝鎴栬呭叏閮細緙虹渷鐨勬垨鑰呯┖鐨勬瀯閫犲嚱鏁幫紝鎷瘋礉鏋勯犲嚱鏁幫紝鎷瘋礉璧嬪兼搷浣滐紝鐢ㄤ簬鎸囧畾璧勬簮鐨勬柟娉曘傛渶閲嶈鐨勬槸錛岃繖鏍風殑綾誨湪鏋愭瀯鍑芥暟鍜屼換浣曠被浼糲lose()鐨勬柟娉曚腑錛岄噴鏀捐祫婧愬墠錛岄兘蹇呴』媯嫻嬭灝佽鐨勮祫婧愭槸涓嶆槸null銆?/p>


璧勬簮鏉ユ簮

瀵逛簬鎻愪緵RAII鐨勭被鏉ヨ錛岀浜屼釜閲嶈鐨勭壒寰佹槸錛屽畠浠氳繃浠涔堥斿緞鑾峰彇鑷繁鎵綆$悊鐨勮祫婧愩備互std::string涓轟唬琛ㄧ殑綾伙紝浣跨敤鐨勬槸鍐呴儴鍒濆鍖栫殑RAII錛氬畠綆$悊鐨勮祫婧?-鍗沖唴瀛樹腑鐢ㄤ簬淇濆瓨瀛楃鐨勭紦鍐插尯--鏄敱瀹冭嚜宸卞垱寤虹殑錛岃繖涓璧勬簮瀵瑰姘歌繙鏄笉鍙鐨勩備笌姝や笉鍚岀殑鏄紝浠td::auto_ptr涓轟唬琛ㄧ殑綾昏〃鐜板嚭澶栭儴鍒濆鍖栫殑RAII琛屼負錛氬畠鎵綆$悊鐨勮祫婧愶紝鏄嬌鐢ㄥ畠鐨勫鎴風▼搴忥紙閫氳繃鍙﹀鐨勬煇縐嶆柟寮忚幏寰椾箣鍚庯級浜ょ粰瀹冪殑銆?/p>

鍐呴儴鍒濆鍖栫殑RAII鐨勫皝瑁呯被錛屼竴鑸瘮杈冨鏄撳疄鐜幫紝浣嗘槸鍔熻兘涓婁篃姣旇緝鍙楅檺鍒訛紝鍥犱負瀹冧滑鑾峰彇璧勬簮鐨勬満鍒舵槸棰勫厛瀹氫箟濂界殑錛屽茍涓旀槸鍥哄畾涓嶅彉鐨勩備笉榪囷紝榪欐牱鐨勭被鐢ㄨ搗鏉ヤ篃瀹規槗涓浜涳紝鎴栬呰錛屾瘮杈冮毦琚鐢細鍥犱負瀹㈡埛浠g爜鍑犱箮娌℃湁鏈轟細鐘笅鑳藉鑷磋祫婧愭硠闇茬殑閿欒銆?/p>

codeArt 2010-11-06 17:30 鍙戣〃璇勮
]]>
C++鐨勭戶鎵?/title><link>http://www.shnenglu.com/codeart/archive/2010/08/31/125326.html</link><dc:creator>codeArt</dc:creator><author>codeArt</author><pubDate>Mon, 30 Aug 2010 17:32:00 GMT</pubDate><guid>http://www.shnenglu.com/codeart/archive/2010/08/31/125326.html</guid><wfw:comment>http://www.shnenglu.com/codeart/comments/125326.html</wfw:comment><comments>http://www.shnenglu.com/codeart/archive/2010/08/31/125326.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/codeart/comments/commentRss/125326.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/codeart/services/trackbacks/125326.html</trackback:ping><description><![CDATA[<p> </p> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080"> 1</span><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img id=Codehighlighter1_11_246_Open_Image onclick="this.style.display='none'; Codehighlighter1_11_246_Open_Text.style.display='none'; Codehighlighter1_11_246_Closed_Image.style.display='inline'; Codehighlighter1_11_246_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_11_246_Closed_Image onclick="this.style.display='none'; Codehighlighter1_11_246_Closed_Text.style.display='none'; Codehighlighter1_11_246_Open_Image.style.display='inline'; Codehighlighter1_11_246_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_11_246_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_11_246_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id=Codehighlighter1_31_32_Open_Image onclick="this.style.display='none'; Codehighlighter1_31_32_Open_Text.style.display='none'; Codehighlighter1_31_32_Closed_Image.style.display='inline'; Codehighlighter1_31_32_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_31_32_Closed_Image onclick="this.style.display='none'; Codehighlighter1_31_32_Closed_Text.style.display='none'; Codehighlighter1_31_32_Open_Image.style.display='inline'; Codehighlighter1_31_32_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_31_32_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_31_32_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img id=Codehighlighter1_46_47_Open_Image onclick="this.style.display='none'; Codehighlighter1_46_47_Open_Text.style.display='none'; Codehighlighter1_46_47_Closed_Image.style.display='inline'; Codehighlighter1_46_47_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_46_47_Closed_Image onclick="this.style.display='none'; Codehighlighter1_46_47_Closed_Text.style.display='none'; Codehighlighter1_46_47_Open_Image.style.display='inline'; Codehighlighter1_46_47_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #000000">~</span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_46_47_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_46_47_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img id=Codehighlighter1_75_104_Open_Image onclick="this.style.display='none'; Codehighlighter1_75_104_Open_Text.style.display='none'; Codehighlighter1_75_104_Closed_Image.style.display='inline'; Codehighlighter1_75_104_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_75_104_Closed_Image onclick="this.style.display='none'; Codehighlighter1_75_104_Closed_Text.style.display='none'; Codehighlighter1_75_104_Open_Image.style.display='inline'; Codehighlighter1_75_104_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> func1()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_75_104_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_75_104_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">base::func1\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img id=Codehighlighter1_131_160_Open_Image onclick="this.style.display='none'; Codehighlighter1_131_160_Open_Text.style.display='none'; Codehighlighter1_131_160_Closed_Image.style.display='inline'; Codehighlighter1_131_160_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_131_160_Closed_Image onclick="this.style.display='none'; Codehighlighter1_131_160_Closed_Text.style.display='none'; Codehighlighter1_131_160_Open_Image.style.display='inline'; Codehighlighter1_131_160_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> func2()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_131_160_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_131_160_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">base::func2\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> ma;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> mb;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img id=Codehighlighter1_209_244_Open_Image onclick="this.style.display='none'; Codehighlighter1_209_244_Open_Text.style.display='none'; Codehighlighter1_209_244_Closed_Image.style.display='inline'; Codehighlighter1_209_244_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_209_244_Closed_Image onclick="this.style.display='none'; Codehighlighter1_209_244_Closed_Text.style.display='none'; Codehighlighter1_209_244_Open_Image.style.display='inline'; Codehighlighter1_209_244_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> member_func()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_209_244_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_209_244_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">base::member_func\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> derive : </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_277_586_Open_Image onclick="this.style.display='none'; Codehighlighter1_277_586_Open_Text.style.display='none'; Codehighlighter1_277_586_Closed_Image.style.display='inline'; Codehighlighter1_277_586_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_277_586_Closed_Image onclick="this.style.display='none'; Codehighlighter1_277_586_Closed_Text.style.display='none'; Codehighlighter1_277_586_Open_Image.style.display='inline'; Codehighlighter1_277_586_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_277_586_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_277_586_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img id=Codehighlighter1_299_300_Open_Image onclick="this.style.display='none'; Codehighlighter1_299_300_Open_Text.style.display='none'; Codehighlighter1_299_300_Closed_Image.style.display='inline'; Codehighlighter1_299_300_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_299_300_Closed_Image onclick="this.style.display='none'; Codehighlighter1_299_300_Closed_Text.style.display='none'; Codehighlighter1_299_300_Open_Image.style.display='inline'; Codehighlighter1_299_300_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    derive()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_299_300_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_299_300_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id=Codehighlighter1_316_317_Open_Image onclick="this.style.display='none'; Codehighlighter1_316_317_Open_Text.style.display='none'; Codehighlighter1_316_317_Closed_Image.style.display='inline'; Codehighlighter1_316_317_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_316_317_Closed_Image onclick="this.style.display='none'; Codehighlighter1_316_317_Closed_Text.style.display='none'; Codehighlighter1_316_317_Open_Image.style.display='inline'; Codehighlighter1_316_317_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">derive()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_316_317_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_316_317_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img id=Codehighlighter1_345_376_Open_Image onclick="this.style.display='none'; Codehighlighter1_345_376_Open_Text.style.display='none'; Codehighlighter1_345_376_Closed_Image.style.display='inline'; Codehighlighter1_345_376_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_345_376_Closed_Image onclick="this.style.display='none'; Codehighlighter1_345_376_Closed_Text.style.display='none'; Codehighlighter1_345_376_Open_Image.style.display='inline'; Codehighlighter1_345_376_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> func1()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_345_376_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_345_376_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">derive::func1\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id=Codehighlighter1_403_434_Open_Image onclick="this.style.display='none'; Codehighlighter1_403_434_Open_Text.style.display='none'; Codehighlighter1_403_434_Closed_Image.style.display='inline'; Codehighlighter1_403_434_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_403_434_Closed_Image onclick="this.style.display='none'; Codehighlighter1_403_434_Closed_Text.style.display='none'; Codehighlighter1_403_434_Open_Image.style.display='inline'; Codehighlighter1_403_434_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> func3()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_403_434_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_403_434_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">derive::func3\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id=Codehighlighter1_461_492_Open_Image onclick="this.style.display='none'; Codehighlighter1_461_492_Open_Text.style.display='none'; Codehighlighter1_461_492_Closed_Image.style.display='inline'; Codehighlighter1_461_492_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_461_492_Closed_Image onclick="this.style.display='none'; Codehighlighter1_461_492_Closed_Text.style.display='none'; Codehighlighter1_461_492_Open_Image.style.display='inline'; Codehighlighter1_461_492_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> func4()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_461_492_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_461_492_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">derive::func4\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> ma2;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> mb2;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img id=Codehighlighter1_546_584_Open_Image onclick="this.style.display='none'; Codehighlighter1_546_584_Open_Text.style.display='none'; Codehighlighter1_546_584_Closed_Image.style.display='inline'; Codehighlighter1_546_584_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_546_584_Closed_Image onclick="this.style.display='none'; Codehighlighter1_546_584_Closed_Text.style.display='none'; Codehighlighter1_546_584_Open_Image.style.display='inline'; Codehighlighter1_546_584_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> member_func2()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_546_584_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_546_584_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">derive::member_func2\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> derive2 : </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> derive<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img id=Codehighlighter1_620_935_Open_Image onclick="this.style.display='none'; Codehighlighter1_620_935_Open_Text.style.display='none'; Codehighlighter1_620_935_Closed_Image.style.display='inline'; Codehighlighter1_620_935_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_620_935_Closed_Image onclick="this.style.display='none'; Codehighlighter1_620_935_Closed_Text.style.display='none'; Codehighlighter1_620_935_Open_Image.style.display='inline'; Codehighlighter1_620_935_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_620_935_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_620_935_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img id=Codehighlighter1_643_644_Open_Image onclick="this.style.display='none'; Codehighlighter1_643_644_Open_Text.style.display='none'; Codehighlighter1_643_644_Closed_Image.style.display='inline'; Codehighlighter1_643_644_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_643_644_Closed_Image onclick="this.style.display='none'; Codehighlighter1_643_644_Closed_Text.style.display='none'; Codehighlighter1_643_644_Open_Image.style.display='inline'; Codehighlighter1_643_644_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    derive2()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_643_644_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_643_644_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img id=Codehighlighter1_661_662_Open_Image onclick="this.style.display='none'; Codehighlighter1_661_662_Open_Text.style.display='none'; Codehighlighter1_661_662_Closed_Image.style.display='inline'; Codehighlighter1_661_662_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_661_662_Closed_Image onclick="this.style.display='none'; Codehighlighter1_661_662_Closed_Text.style.display='none'; Codehighlighter1_661_662_Open_Image.style.display='inline'; Codehighlighter1_661_662_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">derive2()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_661_662_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_661_662_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img id=Codehighlighter1_690_722_Open_Image onclick="this.style.display='none'; Codehighlighter1_690_722_Open_Text.style.display='none'; Codehighlighter1_690_722_Closed_Image.style.display='inline'; Codehighlighter1_690_722_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_690_722_Closed_Image onclick="this.style.display='none'; Codehighlighter1_690_722_Closed_Text.style.display='none'; Codehighlighter1_690_722_Open_Image.style.display='inline'; Codehighlighter1_690_722_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> func3()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_690_722_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_690_722_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">derive2::func3\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img id=Codehighlighter1_749_781_Open_Image onclick="this.style.display='none'; Codehighlighter1_749_781_Open_Text.style.display='none'; Codehighlighter1_749_781_Closed_Image.style.display='inline'; Codehighlighter1_749_781_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_749_781_Closed_Image onclick="this.style.display='none'; Codehighlighter1_749_781_Closed_Text.style.display='none'; Codehighlighter1_749_781_Open_Image.style.display='inline'; Codehighlighter1_749_781_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> func4()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_749_781_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_749_781_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">derive2::func4\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img id=Codehighlighter1_808_840_Open_Image onclick="this.style.display='none'; Codehighlighter1_808_840_Open_Text.style.display='none'; Codehighlighter1_808_840_Closed_Image.style.display='inline'; Codehighlighter1_808_840_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_808_840_Closed_Image onclick="this.style.display='none'; Codehighlighter1_808_840_Closed_Text.style.display='none'; Codehighlighter1_808_840_Open_Image.style.display='inline'; Codehighlighter1_808_840_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> func5()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_808_840_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_808_840_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">derive2::func5\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> ma3;<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> mb3;<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img id=Codehighlighter1_894_933_Open_Image onclick="this.style.display='none'; Codehighlighter1_894_933_Open_Text.style.display='none'; Codehighlighter1_894_933_Closed_Image.style.display='inline'; Codehighlighter1_894_933_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_894_933_Closed_Image onclick="this.style.display='none'; Codehighlighter1_894_933_Closed_Text.style.display='none'; Codehighlighter1_894_933_Open_Image.style.display='inline'; Codehighlighter1_894_933_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> member_func3()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_894_933_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_894_933_Open_Text><span style="COLOR: #000000">{printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">derive2::member_func3\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> _tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, _TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> argv[])<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img id=Codehighlighter1_975_1482_Open_Image onclick="this.style.display='none'; Codehighlighter1_975_1482_Open_Text.style.display='none'; Codehighlighter1_975_1482_Closed_Image.style.display='inline'; Codehighlighter1_975_1482_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_975_1482_Closed_Image onclick="this.style.display='none'; Codehighlighter1_975_1482_Closed_Text.style.display='none'; Codehighlighter1_975_1482_Open_Image.style.display='inline'; Codehighlighter1_975_1482_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_975_1482_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_975_1482_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    typedef </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">Fun)(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    Fun pfun </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    derive2</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> d2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> derive2;<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> p </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)d2;<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">300</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2000</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">30000</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img id=Codehighlighter1_1225_1360_Open_Image onclick="this.style.display='none'; Codehighlighter1_1225_1360_Open_Text.style.display='none'; Codehighlighter1_1225_1360_Closed_Image.style.display='inline'; Codehighlighter1_1225_1360_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1225_1360_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1225_1360_Closed_Text.style.display='none'; Codehighlighter1_1225_1360_Open_Image.style.display='inline'; Codehighlighter1_1225_1360_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1225_1360_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_1225_1360_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">        Fun pfun </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Fun)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">((</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i);<br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (pfun)<br></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">            pfun();<br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">        </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">            printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">null\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">     }</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    <br></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> b2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> derive;<br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> p2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)b2;<br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    pfun </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Fun)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">((</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    pfun();<br></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    <br></span><span style="COLOR: #008080">73</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span></div> <p><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 16px Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, Arial, sans-serif; FONT-SIZE: 13px" class=Apple-style-span><span style="COLOR: purple" class=code-string></span></span></span> </p> <img src ="http://www.shnenglu.com/codeart/aggbug/125326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/codeart/" target="_blank">codeArt</a> 2010-08-31 01:32 <a href="http://www.shnenglu.com/codeart/archive/2010/08/31/125326.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬Detours[杞琞http://www.shnenglu.com/codeart/archive/2010/08/29/125226.htmlcodeArtcodeArtSun, 29 Aug 2010 15:08:00 GMThttp://www.shnenglu.com/codeart/archive/2010/08/29/125226.htmlhttp://www.shnenglu.com/codeart/comments/125226.htmlhttp://www.shnenglu.com/codeart/archive/2010/08/29/125226.html#Feedback0http://www.shnenglu.com/codeart/comments/commentRss/125226.htmlhttp://www.shnenglu.com/codeart/services/trackbacks/125226.htmlDetours鏄井杞紑鍙戠殑涓涓嚱鏁板簱錛堟簮浠g爜鍙湪http://research.microsoft.com/sn/detours 鍏嶈垂鑾峰緱錛? 鐢ㄤ簬淇敼榪愯涓殑紼嬪簭鍦ㄥ唴瀛樹腑鐨勫獎鍍忥紝浠庤屽嵆浣挎病鏈夋簮浠g爜涔熻兘鏀瑰彉紼嬪簭鐨勮涓恒傚叿浣撶敤閫旀槸錛?br style="LINE-HEIGHT: normal">
鎷︽埅WIN32 API璋冪敤錛屽皢鍏跺紩瀵煎埌鑷繁鐨勫瓙紼嬪簭錛屼粠鑰屽疄鐜癢IN32 API鐨勫畾鍒躲?br style="LINE-HEIGHT: normal">涓轟竴涓凡鍦ㄨ繍琛岀殑榪涚▼鍒涘緩涓鏂扮嚎紼嬶紝瑁呭叆鑷繁鐨勪唬鐮佸茍榪愯銆?br style="LINE-HEIGHT: normal">鏈枃灝嗙畝浠婦etours鐨勫師鐞嗭紝Detours搴撳嚱鏁扮殑鐢ㄦ硶錛?騫跺埄鐢―etours搴撳嚱鏁板湪Windows NT涓婄紪鍐欎簡涓涓▼搴忥紝璇ョ▼搴忚兘浣挎湁“璋冭瘯紼嬪簭”鐨勭敤鎴鋒潈闄愮殑鐢ㄦ埛鎴愪負緋葷粺綆$悊鍛橈紝闄勫綍鍒╃敤Detours搴撳嚱鏁頒慨鏀硅紼嬪簭浣挎櫘閫氱敤鎴峰嵆鍙垚涓虹郴緇熺鐞嗗憳錛堝湪NT4 SP3涓婏級銆?br style="LINE-HEIGHT: normal">
涓錛?Detours鐨勫師鐞?br style="LINE-HEIGHT: normal">
1錛?WIN32榪涚▼鐨勫唴瀛樼鐞?br style="LINE-HEIGHT: normal">
鎬繪墍鍛ㄧ煡錛學INDOWS NT瀹炵幇浜嗚櫄鎷熷瓨鍌ㄥ櫒錛屾瘡涓WIN32榪涚▼鎷ユ湁4GB鐨勮櫄瀛樼┖闂達紝 鍏充簬WIN32榪涚▼鐨勮櫄瀛樼粨鏋勫強鍏舵搷浣滅殑鍏蜂綋緇嗚妭璇峰弬闃匴IN32 API鎵嬪唽錛?浠ヤ笅浠呮寚鍑轟笌Detours鐩稿叧鐨勫嚑鐐癸細

(1) 榪涚▼瑕佹墽琛岀殑鎸囦護涔熸斁鍦ㄨ櫄瀛樼┖闂翠腑
(2) 鍙互浣跨敤QueryProtectEx鍑芥暟鎶婂瓨鏀炬寚浠ょ殑欏甸潰鐨勬潈闄愭洿鏀逛負鍙鍙啓鍙墽琛岋紝鍐嶆敼鍐欏叾鍐呭錛屼粠鑰屼慨鏀規鍦ㄨ繍琛岀殑紼嬪簭
(3) 鍙互浣跨敤VirtualAllocEx浠庝竴涓繘紼嬩負鍙︿竴姝h繍琛岀殑榪涚▼鍒嗛厤铏氬瓨錛屽啀浣跨敤 QueryProtectEx鍑芥暟鎶婇〉闈㈢殑鏉冮檺鏇存敼涓哄彲璇誨彲鍐欏彲鎵ц錛屽茍鎶婅鎵ц鐨勬寚浠や互浜岃繘鍒舵満鍣ㄧ爜鐨勫艦寮忓啓鍏ワ紝浠庤屼負涓涓鍦ㄨ繍琛岀殑榪涚▼娉ㄥ叆浠繪剰鐨勪唬鐮?br style="LINE-HEIGHT: normal">
2錛?鎷︽埅WIN32 API鐨勫師鐞?br style="LINE-HEIGHT: normal">
Detours瀹氫箟浜嗕笁涓蹇碉細

(1) Target鍑芥暟錛氳鎷︽埅鐨勫嚱鏁幫紝閫氬父涓篧indows鐨凙PI銆?br style="LINE-HEIGHT: normal">(2) Trampoline鍑芥暟錛歍arget鍑芥暟鐨勫鍒跺搧銆傚洜涓篋etours灝嗕細鏀瑰啓Target鍑芥暟錛屾墍浠ュ厛鎶奣arget鍑芥暟澶嶅埗淇濆瓨濂斤紝涓鏂歸潰浠嶇劧淇濆瓨Target鍑芥暟鐨勮繃紼嬭皟鐢ㄨ涔夛紝鍙︿竴鏂歸潰渚夸簬浠ュ悗鐨勬仮澶嶃?br style="LINE-HEIGHT: normal">(3) Detour 鍑芥暟錛氱敤鏉ユ浛浠arget鍑芥暟鐨勫嚱鏁般?br style="LINE-HEIGHT: normal">
Detours鍦═arget鍑芥暟鐨勫紑澶村姞鍏MP Address_of_ Detour_ Function鎸囦護錛堝叡5涓瓧鑺傦級鎶婂Target鍑芥暟鐨勮皟鐢ㄥ紩瀵煎埌鑷繁鐨凞etour鍑芥暟錛?鎶奣arget鍑芥暟鐨勫紑澶寸殑5涓瓧鑺傚姞涓奐MP Address_of_ Target _ Function+5浣滀負Trampoline鍑芥暟銆備緥瀛愬涓嬶細

鎷︽埅鍓嶏細Target _ Function錛?br style="LINE-HEIGHT: normal">錛汿arget鍑芥暟鍏ュ彛錛屼互涓嬩負鍋囨兂鐨勫父瑙佺殑瀛愮▼搴忓叆鍙d唬鐮?br style="LINE-HEIGHT: normal">push   ebp
mov   ebp,   esp
push   eax
push   ebx
Trampoline:
錛涗互涓嬫槸Target鍑芥暟鐨勭戶緇儴鍒?br style="LINE-HEIGHT: normal">……

鎷︽埅鍚庯細 Target _ Function錛?br style="LINE-HEIGHT: normal">jmp   Detour_Function
Trampoline:
錛涗互涓嬫槸Target鍑芥暟鐨勭戶緇儴鍒?br style="LINE-HEIGHT: normal">……

Trampoline_Function:
; Trampoline鍑芥暟鍏ュ彛, 寮澶寸殑5涓瓧鑺備笌Target鍑芥暟鐩稿悓
push   ebp
mov   ebp,   esp
push   eax
push   ebx
錛涜煩鍥炲幓緇х畫鎵цTarget鍑芥暟
jmp   Target_Function+5
3錛?涓轟竴涓凡鍦ㄨ繍琛岀殑榪涚▼瑁呭叆涓涓狣LL

浠ヤ笅鏄叾姝ラ錛?br style="LINE-HEIGHT: normal">
(1) 鍒涘緩涓涓猅hreadFuction錛屽唴瀹逛粎鏄皟鐢↙oadLibrary銆?br style="LINE-HEIGHT: normal">(2) 鐢╒irtualAllocEx涓轟竴涓凡鍦ㄨ繍琛岀殑榪涚▼鍒嗛厤涓鐗囪櫄瀛橈紝騫舵妸鏉冮檺鏇存敼涓哄彲璇誨彲鍐欏彲鎵ц銆?br style="LINE-HEIGHT: normal">(3) 鎶奣hreadFuction鐨勪簩榪涘埗鏈哄櫒鐮佸啓鍏ヨ繖鐗囪櫄瀛樸?br style="LINE-HEIGHT: normal">(4) 鐢–reateRemoteThread鍦ㄨ榪涚▼涓婂垱寤轟竴涓嚎紼嬶紝浼犲叆鍓嶉潰鍒嗛厤鐨勮櫄瀛樼殑璧峰鍦板潃浣滀負綰跨▼鍑芥暟鐨勫湴鍧錛屽嵆鍙負涓涓凡鍦ㄨ繍琛岀殑榪涚▼瑁呭叆涓涓狣LL銆傞氳繃DllMain 鍗沖彲鍦ㄤ竴涓凡鍦ㄨ繍琛岀殑榪涚▼涓繍琛岃嚜宸辯殑浠g爜銆?br style="LINE-HEIGHT: normal">
浜岋紟 Detours搴撳嚱鏁扮殑鐢ㄦ硶

鍥犱負Detours杞歡鍖呭茍娌℃湁闄勫甫甯姪鏂囦歡錛屼互涓嬫帴鍙d粎浠庡墫鏋愭簮浠g爜寰楀嚭銆?br style="LINE-HEIGHT: normal">
1錛?PBYTE WINAPI DetourFindFunction(PCHAR pszModule, PCHAR pszFunction)

鍔熻兘錛氫粠涓DLL涓壘鍑轟竴鍑芥暟鐨勫叆鍙e湴鍧
鍙傛暟錛歱szModule鏄疍LL鍚嶏紝pszFunction鏄嚱鏁板悕銆?br style="LINE-HEIGHT: normal">榪斿洖錛氬悕涓簆szModule鐨凞LL鐨勫悕涓簆szFunction鐨勫嚱鏁扮殑鍏ュ彛鍦板潃
璇存槑錛欴etourFindFunction闄や嬌鐢℅etProcAddress澶栵紝榪樼洿鎺ュ垎鏋怐LL鐨勬枃浠跺ご錛屽洜姝ゅ彲浠ユ壘鍒頒竴浜汫etProcAddress鎵句笉鍒扮殑鍑芥暟鍏ュ彛銆?br style="LINE-HEIGHT: normal">
2錛?DETOUR_TRAMPOLINE(trampoline_prototype, target_name)
鍔熻兘錛氳瀹忔妸鍚嶄負target_name 鐨凾arget鍑芥暟鐢熸垚Trampoline鍑芥暟錛屼互鍚庤皟鐢?trampoline_prototype鍦ㄨ涔変笂絳変簬璋冪敤Target鍑芥暟銆?br style="LINE-HEIGHT: normal">
3錛?BOOL WINAPI DetourFunctionWithTrampoline(PBYTE pbTrampoline, BYTE pbDetour)
鍔熻兘錛氱敤Detour 鍑芥暟鎷︽埅Target鍑芥暟
鍙傛暟錛歱bTrampoline鏄疍ETOUR_TRAMPOLINE寰楀埌鐨則rampoline_prototype錛宲bDetour鏄?Detour 鍑芥暟鐨勫叆鍙e湴鍧銆?br style="LINE-HEIGHT: normal">
4錛?BOOL WINAPI DetourRemoveWithTrampoline(PBYTE pbTrampoline,PBYTE pbDetour)
鍔熻兘錛氭仮澶峊arget鍑芥暟
鍙傛暟錛歱bTrampoline鏄疍ETOUR_TRAMPOLINE寰楀埌鐨則rampoline_prototype錛宲bDetour鏄?Detour 鍑芥暟鐨勫叆鍙e湴鍧銆?br style="LINE-HEIGHT: normal">
5錛?BOOL WINAPI ContinueProcessWithDll(HANDLE hProcess, LPCSTR lpDllName)
鍔熻兘錛氫負涓涓凡鍦ㄨ繍琛岀殑榪涚▼瑁呭叆涓涓狣LL
鍙傛暟錛歨Process鏄繘紼嬬殑鍙ユ焺錛宭pDllName鏄瑁呭叆鐨凞LL鍚?br style="LINE-HEIGHT: normal">
涓夛紟 紼嬪簭瀹炰緥

浠ヤ竴涓兘浣挎湁“璋冭瘯紼嬪簭”鐨勭敤鎴鋒潈闄愮殑鐢ㄦ埛鎴愪負緋葷粺綆$悊鍛樼殑紼嬪簭鍋氫緥瀛愯鏄嶥etours 搴撳嚱鏁扮殑鐢ㄦ硶銆傜▼搴忕殑璁捐鎬濊礬鏄壘涓涓互System甯愬彿榪愯鐨勮繘紼嬶紝濡俿poolss.exe, rpcss.exe, winlogon.exe, service.exe絳夛紝浣跨敤ContinueProcessWithDll鍦ㄥ叾涓敞鍏ユ妸褰撳墠鐢ㄦ埛鍔犲叆鍒?Administrators鏈湴緇勭殑DLL錛屽洜涓鴻DLL鍦ㄨ繖浜涜繘紼嬬殑瀹夊叏涓婁笅鏂囩幆澧冭繍琛岋紝鎵浠ユ湁鐩稿簲鐨勬潈闄愩?br style="LINE-HEIGHT: normal">
鍏堢紪鍐欑浉搴旂殑DLL錛?br style="LINE-HEIGHT: normal">
/*admin.dll, 褰撹繘紼嬭鍏ユ椂浼氭妸鍚嶄負szAccountName
鐨勭敤鎴峰姞鍏ュ埌Administrators鏈湴緇勩?/

#include
#include
#include
#include

/*浠ヤ笅鍒涘緩涓鍏變韓孌靛疄鐜拌繘紼嬮棿鐨勬暟鎹氳錛?br style="LINE-HEIGHT: normal">szAccountName 鏄敤鎴峰悕錛宐Prepared璇存槑
szAccountName鏄惁宸插垵濮嬪寲銆?/

#pragma data_seg(".MYSHARE")
BOOL bPrepared=FALSE;
wchar_t szAccountName[100]={0};
#pragma data_seg()

#pragma comment(linker, "/SECTION:.MYSHARE,RWS")

/*紼嬪簭璋冪敤SetAccountName璁劇疆瑕佸姞鍏ュ埌Administrators
鏈湴緇勭殑鐢ㄦ埛鍚嶏紝騫墮氱煡DllMain
宸插垵濮嬪寲szAccountName 錛?br style="LINE-HEIGHT: normal">浠ュ悗琚鍏ユ椂鍙皟鐢‥levatePriv */

__declspec(dllexport) VOID WINAPI
SetAccountName(wchar_t *Name)
{
    wcscpy(szAccountName,Name);
    bPrepared=TRUE;
}

/*鎶婂悕涓簊zAccountName鐨勭敤鎴峰姞鍏?br style="LINE-HEIGHT: normal">鍒癆dministrators鏈湴緇?/

__declspec(dllexport) VOID WINAPI ElevatePriv()
{
    LOCALGROUP_MEMBERS_INFO_3 account;
    account.lgrmi3_domainandname=szAccountName;
    NetLocalGroupAddMembers(NULL,L"Administrators",
        3,(LPBYTE)&account,1);
}

__declspec(dllexport) ULONG WINAPI
DllMain(HINSTANCE hInstance,
        DWORD dwReason, PVOID lpReserved)
{
    switch (dwReason) {
   case DLL_THREAD_ATTACH:
       if (bPrepared)
           ElevatePriv();
    }
    return TRUE;
}

紼嬪簭濡備笅錛?br style="LINE-HEIGHT: normal">
/*AddMeToAdministrators.exe 鎶婂綋鍓嶇敤鎴峰姞鍏ュ埌
Administrators鏈湴緇勩備嬌鐢ㄦ柟娉曚負錛氾紙1錛?br style="LINE-HEIGHT: normal">榪愯浠誨姟綆$悊鍣ㄦ壘鍒皊poolss.exe鎴杛pcss.exe鎴杦inlogon.exe鎴杝evice.exe鐨勮繘紼婭D 錛?錛夋墽琛孉ddMeToAdministrators.exe procid, 鍏朵腑procid涓猴紙1錛夎涓嬬殑榪涚▼ID 錛?錛夌閫鍐嶇鍒幫紝榪愯鐢ㄦ埛綆$悊鍣紝鍗沖彲鍙戠幇鑷繁宸插湪Administrators鏈湴緇勪腑銆?/

#include
#include
#include
#include
#include

extern VOID WINAPI SetAccountName(wchar_t *Name);

/* GetCurrentUser寰楀埌鑷繁鐨勭敤鎴峰悕縐?/

void GetCurrentUser(wchar_t *szName)
{
    HANDLE hProcess, hAccessToken;
    wchar_t InfoBuffer[1000],szAccountName[200],
        szDomainName[200];
    PTOKEN_USER pTokenUser = (PTOKEN_USER)InfoBuffer;
    DWORD dwInfoBufferSize,dwAccountSize = 200,
        dwDomainSize = 200;
    SID_NAME_USE snu;

    hProcess = GetCurrentProcess();

    OpenProcessToken(hProcess,TOKEN_READ,&hAccessToken);

    GetTokenInformation(hAccessToken,TokenUser,
        InfoBuffer,
        1000, &dwInfoBufferSize);

    LookupAccountSid(NULL, pTokenUser->User.Sid,
        szAccountName,
        &dwAccountSize,szDomainName, &dwDomainSize, &snu);
    wcscpy(szName,szDomainName);
    wcscat(szName,L"\");
        wcscat(szName,szAccountName);
}

/* EnablePrivilege鍚敤鑷繁鐨?#8220;璋冭瘯紼嬪簭”鐨勭敤鎴鋒潈闄?/

BOOL EnablePrivilege(LPCTSTR szPrivName,BOOL fEnable)
{
    HANDLE hToken;
    if (!OpenProcessToken(GetCurrentProcess(),
        TOKEN_ADJUST_PRIVILEGES, &hToken))
        return FALSE;
    TOKEN_PRIVILEGES tp;
    tp.PrivilegeCount = 1;
    LookupPrivilegeValue(NULL, szPrivName,
        &tp.Privileges[0].Luid);
    tp.Privileges[0].Attributes = fEnable ?
SE_PRIVILEGE_ENABLED : 0;
    AdjustTokenPrivileges(hToken, FALSE, &tp,
        sizeof(tp), NULL, NULL);
    return((GetLastError() == ERROR_SUCCESS));
}

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprev,
                   LPSTR lpszCmdLine, int
                   nCmdShow)
{
    INT argc;
    WCHAR **argv;
    argv = CommandLineToArgvW(GetCommandLineW(),
        &argc);
    INT nProcessId = -1;
    if (argc!=2){
        wprintf(L"usage %s pid", argv[0]);
        return 1;
    }
    nProcessId = _wtoi(argv[1]);
    printf("%d ",nProcessId);
    /*瑕佹垚鍔熸墽琛孋ontinueProcessWithDll錛岃瀵箇inlogon.exe絳夎繘紼嬬殑榪涚▼鍙ユ焺鏈夎鍐欏瓨鍌ㄥ櫒鍐呭鍜屽垱寤虹嚎紼嬬殑鏉冮檺錛孍nablePrivilege浣挎湰榪涚▼鏈夎繖鏍風殑鏉冨埄銆?/

    if (!EnablePrivilege(SE_DEBUG_NAME, TRUE)){
        printf("AdjustTokenPrivilege Fail %u ",
            (UINT)GetLastError());
        return 1;
    }
    HANDLE   gNewHandle =
        OpenProcess(PROCESS_ALL_ACCESS
        , TRUE, nProcessId);
    if (!gNewHandle){
        printf("OpenProcess Fail %u ",
            (UINT)GetLastError());
        return 1;
    }
    wchar_t szName[100];
    GetCurrentUser(szName);
    SetAccountName(szName);
    If (!ContinueProcessWithDll(gNewHandle,
        L"c:\temp\admin.dll")) {
            printf("ContinueProcessWithDll failed %u",
                (UINT)GetLastError());
            return 3;
    }
    return 0;
}
鍥犱負“璋冭瘯紼嬪簭”鐨勭敤鎴鋒潈闄愮己鐪佹儏鍐典笅浠呰祴浜堢粰綆$悊鍛橈紝鍥犳騫朵笉浼氶犳垚瀹夊叏婕忔礊銆備絾璇ョ▼搴忔彮紺哄嚭“璋冭瘯紼嬪簭”鐨勭敤鎴鋒潈闄愬叾瀹炴槸鑷抽珮鏃犱笂鐨勭敤鎴鋒潈闄愶紝鍙兘鎺堜簣緇欏彲淇$敤鎴楓?br style="LINE-HEIGHT: normal">
鍥涳紟 緇撹      Detours鏄竴寮哄ぇ鐨勫伐鍏鳳紝鎻愪緵浜嗙畝鍗曟槗鐢ㄧ殑鍑芥暟鎺ュ彛鏉ユ嫤鎴猈IN32 API璋冪敤鍜屼負涓涓凡鍦ㄨ繍琛岀殑榪涚▼瑁呭叆涓涓狣LL銆?/span>


codeArt 2010-08-29 23:08 鍙戣〃璇勮
]]>
亚洲国产一成久久精品国产成人综合| 蜜臀av性久久久久蜜臀aⅴ | 久久久久久久精品妇女99| 亚洲国产成人精品无码久久久久久综合| 欧美精品福利视频一区二区三区久久久精品| 亚洲综合精品香蕉久久网97| 国内精品伊人久久久影院| 久久夜色精品国产欧美乱| 久久九九久精品国产免费直播| 精品国产乱码久久久久久人妻| 久久国产乱子伦精品免费强| 亚洲国产精品综合久久一线| 久久99国产精品一区二区| 久久精品中文字幕一区| 国产精品99久久久久久宅男| 亚洲精品无码久久一线| 久久综合给合综合久久| 99久久免费国产精精品| 中文字幕热久久久久久久| 国产精品一区二区久久精品无码| 色欲久久久天天天综合网精品| 久久精品国产亚洲Aⅴ蜜臀色欲| 日韩AV无码久久一区二区| 人妻系列无码专区久久五月天| 精品久久久久香蕉网| 久久精品国产亚洲AV久| 一本一本久久a久久精品综合麻豆| 91精品国产综合久久婷婷| 少妇久久久久久被弄高潮| 色播久久人人爽人人爽人人片AV| 精品无码人妻久久久久久| 免费观看成人久久网免费观看| 久久精品国产亚洲AV忘忧草18| 一本色道久久88综合日韩精品 | 无码精品久久一区二区三区| 国内精品久久久久久久久电影网| 久久九九亚洲精品| 热久久这里只有精品| 久久亚洲国产中v天仙www| 老司机国内精品久久久久| 国产成人精品久久亚洲|