锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩精品二区,欧美二区在线观看,国产一区视频观看http://www.shnenglu.com/road420/zh-cnSun, 14 Dec 2025 08:03:13 GMTSun, 14 Dec 2025 08:03:13 GMT60杞澆錛堜笉瑕佷竴杈堝瓙闈犳妧鏈敓瀛橈級(jí)http://www.shnenglu.com/road420/archive/2013/04/14/199436.html娣遍們鑰?/dc:creator>娣遍們鑰?/author>Sun, 14 Apr 2013 14:27:00 GMThttp://www.shnenglu.com/road420/archive/2013/04/14/199436.htmlhttp://www.shnenglu.com/road420/comments/199436.htmlhttp://www.shnenglu.com/road420/archive/2013/04/14/199436.html#Feedback1http://www.shnenglu.com/road420/comments/commentRss/199436.htmlhttp://www.shnenglu.com/road420/services/trackbacks/199436.html
    涓銆?鍦ㄤ腑鍥戒綘鍗冧竾涓嶈鍥犱負(fù)瀛︿範(fàn)鎶鏈氨鍙互鎹㈡潵紼沖畾鐨勭敓媧誨拰楂樼殑钖按寰呴亣錛屼綘鍗冧竾鏇翠笉瑕佽涓哄摢浜涗粠浜?甯?jìng)鍦哄紑鍙戯紝璺戣吙鐨勪漢錛屾病鏈夊墠閫斻?br />
    涓嶇煡閬撲綘鏄笉鏄煡閬擄紝鍜變滑涓浗鏈夌浉褰撳ぇ鐨勪竴閮ㄥ垎杞歡鍏徃錛屼粬浠殑杞歡寮鍙戝洟闃熼兘灝忕殑鍙滐紝鐢氳嚦鍙湁1-3涓漢錛岃繛涓涓」鐩皬緇勯兘綆椾笉涓婏紝鑰岃繖鏍風(fēng)殑鍥㈤槦鍗磋鎵挎媴涓涓蔣浠跺叕鍙告墍鏈夌殑杞歡寮鍙戜換鍔★紝鍦ㄨ蔣浠朵笂綰垮拰寮鍙戠殑鍏抽敭闃舵闇瑕佸洟闃熺殑鎴愬憳娌℃棩娌″鐨勫姞鐝紝榪橀渶瑕佷負(fù)嫻嬭瘯鍑虹殑BUG鍜屼笉鑳芥寜鏃舵彁浜ょ殑杞歡妯″潡鍔熻兘鑰屽績(jī)鎬蹇愬繎錛屾湁鐨勬椂鍊欏鏋滀綘涓嶅垢鍔犲叆鐜板満寮鍙戠殑鍥㈤槦浣犲垯闇瑕佽儗浜曠涔″憡鍒綘鐨勫コ鍙嬶紝榪涜灝侀棴寮鍙戯紝浣犲鉤鏃墮櫎浜?jiǎn)缂栫爜涔嬪灏辨槸鍚冮キ鍜岀潯瑙夊Q堟湁閽辯殑鍏徃鐢氳嚦璇蜂釜淇濆涓轟綘鍋氶キ錛屼互璁╀綘鑺傜渷鍑烘洿澶氱殑鏃墮棿鏉ユ姇鍏ュ埌宸ヤ綔涓紝璁╀綘涓鐩村湪閭g绱簡(jiǎn)灝變紤鎭紝涓嶇瘡灝辯珛鍗沖伐浣滅殑鐘舵侊級(jí)

    鏇村彲鎬曠殑鏄紝浼?xì)璁╀綘鎺ヨЕ鐨勪汉闄呭叧绯婚潪甯稿崟涓錛岄櫎浜?jiǎn)鏈夐檺鐨勬妧鏈漢鍛樹箣澶栦綘鍑犱箮瑙佷笉鍒板仛鍏朵粬琛屼笟宸ヤ綔鍜岃亴浣嶇殑浜猴紝浣犵殑鏈嬪弸鍦堝瓙灝忎笖鍗曚竴錛岀敋鑷崇牬鍧忎綘鍘熸湁鐨勭埍鎯咃紙鎯寵薄涓涓嬶紝浣犲湪澶栧湴鍋氱幇鍦哄紑鍙?涓湀浠ヤ笂錛屽嵈浠庢病璺熷コ鍙嬭榪囦竴闈㈢殑璇濓紝浣犵殑濂沖弸鏄笉鏄細(xì)瀵逛綘鍛茬墮瑁傚槾錛夈?br />
 

    涔熻浣犳嬁鍒頒簡(jiǎn)鎵璋撶殑鐧介鐨勫伐璧勶紝浣嗕綘鍗翠粠姝ゅけ鍘諱韓鍙楃敓媧葷殑鑷敱錛屽鏋滀綘鎯沖仛鎶鏈漢鍛樺挨鍏舵槸寮鍙戜漢鍛橈紝鎴戞兂浣犲緢蹇氨浼?xì)鐞嗚В锛屼綘澶氫箞鎯冲湪涓涓湴鏂歸暱鏈熷緟涓孌墊椂闂達(dá)紝璁よ瘑涓浜涙湅鍙嬶紝澶氫竴浜涚敓媧繪椂闂寸殑鎰挎湜銆?br />
    姣斾箣浜庢垜浠殑鐢熸椿鍜屼漢闄呭叧緋誨強(qiáng)宸ヤ綔錛岄偅浜涗粠浜嬪敭鍓嶅拰甯?jìng)鍦哄紑鍙戠殑鏈嬪弸錛屽嵈鏈夋瘮鎴戜滑澶氱殑澶氱殑宸ヤ綔涔嬪鐨勬椂闂達(dá)紝鐢氳嚦浠栦滑宸ヤ綔鐨勬椂闂存湁鐨勬椂鍊欐槸鍜岀敓媧葷殑鏃墮棿鏄彲浠ュ吋欏劇殑錛屼粬浠彲浠ラ氳繃甯?jìng)鍦哄紑鍙戯紝璁よ瘑鍚勪釜琛屼笟鐨勪漢澹紝鍙互璁よ瘑鍚勭鍚勬牱鐨勬湅鍙嬶紝浠栦滑姣旀垜浠潶鐜囪鏇存湁鍙戣儲(chǔ)鍜屽彂灞曠殑鏈轟細(xì)錛屽彧瑕佷粬浠窡鎴戜滑涓鏍峰嫟濂嬨傦紙鏈変竴縐嶅嫟濂嬬殑鏅氫漢錛屽鏋滅粰浠栨崲涓湴鏂癸紝浠栭┈涓婁細(xì)鎴愪負(fù)涓涓嫟濂嬩笖鍑轟紬鐨勪漢銆傦級(jí)

    浜屻傚湪瀛︿範(fàn)鎶鏈殑鏃跺欏崈涓囦笉瑕佽涓哄鏋滃仛鍒版妧鏈渶寮猴紝灝卞彲浠ユ垚涓?00%鍙楀皧閲嶇殑浜恒?br />
    鏈変竴嬈′竴涓漢鍦ㄩ潰璇曢」鐩粡鐞嗙殑鏃跺欒浜?jiǎn)杩欎箞涓孌佃瘽錛氭垜鍙敤鏈鍚瘽鐨勪漢錛屾寜鐓ф垜鐨勮姹傚仛鍙鏄惉璇濆氨瑕侊紝濡傛灉涓嶅惉璇濅笉綆′粬鎶鏈啀濂戒篃涓嶈銆傞殢鍚庤繖涓漢寰楀埌浜?jiǎn)璇曠敤鏈轰細(xì)锛屽鏋滄病鎰忓鐨勮瘽锛屼粬涓瀹氫細(xì)鏄笅涓涓」鐩粡鐞嗙殑緇т換鑰呫?br />
    鏈嬪弸浠綘鐭ラ亾鍚楋紵涓嶇浣犳妧鏈湁澶氬己錛屼綘涔熶笉鍙兘鑷敱鐨勮吘鍑烘椂闂磋薄鍒漢閭f牱鐮旂┒涓涓婰INUX婧愮爜錛岀敋鑷沖啓涓涓狶INUX鏍風(fēng)殑鏉頒綔鏉ヨ〃鐜頒綘鐨勬墠鑳姐備綘闇瑕佸仛鐨勫氨鏄寜鐓ц姹傚啓浠g爜錛屽啓浠g爜鐨勫惈涔夊氨鏄兘瑙勫畾濂斤紝浣犳寜鐓ц瀹氬啓錛屼綘寰堝揩灝變細(xì)鍙戠幇浣犳槰澶╁啓鐨勪唬鐮侊紝璺熶粖澶╁啓鐨勪唬鐮佹湁寰堝綾諱技錛岀瓑浣犲啓榪囦竴孌墊椂闂寸殑浠g爜錛屼綘灝嗛鐣ワ細(xì)澶嶅埗錛屾嫹璐濓紝綺樿創(chuàng)閭f牱鐨勬妧鏈浣犳潵璇存槸浣曠瓑閲嶈銆傦紙濡傛灉浣犳病鏈夊仛榪?騫翠互涓婄殑鐪熸鎰忎箟涓婄殑寮鍙戜笉瑕佸弽椹蟲垜錛夈?br />
    濡傛灉浣犲垢榪愮殑鑳藉鍚埌甯?jìng)鍦轰汉鍛樼殑璋堣瘽锛屾垨鏄瀵间滑鐨勮皥璇濆Q屼綘浼?xì)闅惥U﹁寰椾粬浠兘鍦ㄦ妸鎶鏈漢鍛樺綋浣滅紪鐮佺殑鏈哄櫒鏉ョ湅錛屼綘鐨勪環(huán)鍊煎茍娌℃湁浣犳兂璞$殑閭d箞閲嶈銆傝屽湪浣犳墍鍦ㄧ殑鍥㈤槦鍐呴儴錛屼綘鍙兘姝e湪涓轟竴涓妧鏈棶棰樼殑璁ㄨ鍐嶈窡鍚屼簨鎼炲唴鑰楋紝鍥犱負(fù)浠栦笉鏈嶄綘錛屼綘涔熶笉鏈嶄粬錛屼綘浠兘璁や負(fù)鑷繁鐨勫錛屽叾瀹炰綘浠袱涓兘瀵癸紝鑰屼簤璁虹殑鐩殑灝辨槸涓轟簡(jiǎn)鍦ㄥ叧閿満鍚堣瘉鏄庝竴涓嬭嚜宸辨瘮瀵規(guī)柟鎶鏈ソ錛屾瘮瀵規(guī)柟寮恒傦紙鍦ㄤ竴涓」鐩紑鍙戜腑錛屾病鏈変漢鎰挎剰闀挎湡鍚埆浜虹殑錛屾繪兂鎹釜浣嶇疆棰嗗鍒漢銆傦級(jí)

    涓夈備綘鏇翠笉瑕佽涓猴紝濡傛灉鎴戞妧鏈濂斤紝鎴戝氨鑷繁鍒涗笟錛岃嚜宸辨湁鍒涗笟鐨勮祫鏈紝鍥犱負(fù)鑷繁鏄悶鎶鏈殑銆?br />
    濡傛灉浣犻偅鏍瘋涓猴紝鐪熺殑鏄ぇ閿欑壒閿欎簡(jiǎn)錛屼綘鍙互鍋氫釜璋冩煡鍦ㄩ潪鎶鏈漢緹や腑錛屾病鏈夊嚑涓漢鐭ラ亾C#涓嶫AVA鐨勶紝鏇磋皥涓嶄笂鏉ユ璧忎綘鐨勬妧鏈槸濂借繕鏄笉濂姐備竴鍙ヨ瘽錛屾妧鏈粎浠呮槸涓涓伐鍏鳳紝鍠勪簬榪愮敤榪欎釜宸ュ叿涓哄埆浜哄共媧葷殑浜猴紝鍗村線寰涓嶅お鎿呴暱鐢ㄨ繖涓伐鍏鋒潵涓鴻嚜宸卞垱涓氾紝鍥犱負(fù)榪欐槸涓や釜姒傚康錛岃緇冪殑鎶鑳戒篃鏄畬鍏ㄤ笉鍚岀殑銆?br />
    鍒涗笟鏈寮濮嬬殑鏃跺欙紝浣犵殑浜洪檯鍏崇郴錛屼綘澶勭悊浜洪檯鍏崇郴鐨勮兘鍔涳紝浣犲紺句細(xì)娼滆鍒欑殑璁よ瘑錛岃繕鏈変綘鏄庣櫧涓嶆槑鐧藉埆浜虹殑蹇?jī)锛屼綘浼?xì)涓嶄細(xì)璇磋浜哄枩嬈㈢殑璇濓紝榪樻湁浣犲鑷繁鎵鎻愪緵鐨勬湇鍔$殑絳栧垝鍜屾帹閿絳夌瓑錛屼篃璁告湁涓涓囷紝涓鐧句竾涓煎緱鎴戜滑閲嶈鐨勯棶棰橈紝浣嗕綘浼?xì)鍙戠幇鎶鏈嵈寰堝皯鏈夊彲鑳藉寘鍚湪榪欎竴涓囨垨涓鐧句竾涔嬪唴錛屽鏋滀綘鍒涗笟鍒頒簡(jiǎn)涓涓揩鎴愬姛鐨勯樁孌碉紝浣犱細(xì)榪欐牱鍛婅瘔鑷繁錛氭垜騫插悧瑕佷翰鑷仛鎶鏈紝鎴戣仒涓涓漢涓嶅氨琛屼簡(jiǎn)錛岃繖鏃跺欎綘鎵嶇湡姝d細(xì)鐞嗚В鎶鏈殑浣滅敤錛屽拰浣犱互鍓嶅仛鎶鏈漢鍛樼殑浣滅敤銆?br />
    [灝忕粨]

    鍩轟簬涓婇潰鐨勮璁猴紝鎴戝鍔濋偅浜涘涔?fàn)鎶鏈殑鏈嬪弸錛屽崈涓囦笉瑕佹嬁縐戜婦鑰冭瘯鏍風(fēng)殑蹇?jī)鎬佸幓瀛︿範(fàn)鎶鏈?瀵規(guī)妧鏈殑瀛︿範(fàn)鍑犺繎鐨勭棿榪鳳紝鎯蟲帉鎻℃墍鏈夋墍鏈夌殑鎶鏈紝浠ヨ鑷繁鎴愪負(fù)鎶鏈鍩熺殑鏉冨▉鍜屼笓瀹訛紝浠ュ湪蹇呰鐨勬椂鍊欐垨鏄績(jī)閲屼笉鐣呭揩鐨勬椂鍊欏埌緗戜笂瀵圭潃鑿滈笩璇磋嚜宸辨槸鍓嶈緢銆?br />
    鎶鏈粎浠呮槸涓涓伐鍏鳳紝鏄綘鍦ㄤ漢鐢熶竴涓樁孌電敓瀛樼殑宸ュ叿錛屼綘鍙互涓杈堝瓙鍠滄浠栵紝浣嗘渶濂戒笉瑕佷竴杈堝瓙闈犲畠鐢熷瓨銆?br />
    鎺屾彙鎶鏈殑鍞竴鐩殑灝辨槸鎷垮畠鎵懼伐浣滐紙濡傛灉浣犱笉鎯蟲妸鎶鏈綋浣滀綘絎簩鐢熷懡鐨勮瘽錛夛紝灝辨槸騫叉椿銆傛墍浠ヤ綘鍦ㄥ涔?fàn)鐨勬椂鍊欏崈涓囦笉瑕佸幓鍋氶偅浜涙墍璋撶殑鎶鏈範(fàn)棰樻垨鏄爺絀墮偅浜涘附娉$畻娉曪紝鏈澶ф暟綆楁硶浜?jiǎn)锛屼粈涔堝彨騫叉椿錛?br />
    灝辨槸鍋氫竴涓笢瑗胯鍒漢鐢紝鍒漢鐢ㄤ簡(jiǎn)錛屽彲浠ユ彁楂樹粬浠殑宸ヤ綔鏁堢巼錛屾兂璞″惂錛屼綘鍋?涓囬亾鎶鏈範(fàn)棰樻湁浠涔堢敤錛熷彧浼?xì)璁╀壶櫑夊緱閰歌厫锛寴q樻槸鍦ㄥ涔?fàn)鐨勬椂鍊欙紝澶氬煿鍏諱簺鑷繁鍔″疄鐨勬佸害鍚э紝姣斿鐮旂┒涓涓嬪綋鍦板競(jìng)鍦虹洰鍓嶆湁鍝簺杞歡鍏徃鐢ㄤ漢錛岃嚜宸辯浠栦滑鐨勮姹傚埌搴曟湁澶氳繙錛岃嚜宸卞叿浣撳簲璇ユ庝箞鍋氭墠鍙互杈懼埌浠栦滑鐨勮姹傘傜瓑浣犲垎鏋愬畬榪欎簺錛屼綘灝變細(xì)鍙戠幇錛屾壘宸ヤ綔鎴愬姛錛屾妧鏈殑璐$尞鐜囧叾瀹炲茍娌℃湁浣犲師鏉ユ兂璞$殑閭d箞楂樸?br />
    涓嶇浣犳槸瀛︿範(fàn)鎶鏈負(fù)浜?jiǎn)鎵惧伐浣湗q樻槸鍒涗笟錛屼綘閮借瀵規(guī)妧鏈湰韜湁涓竻閱掔殑璁よ瘑錛屽湪涓浗涓嶄細(xì)鍑虹幇BILL GATES錛屽洜涓猴紝涓浗鐩墠榪樹笉鏄崄鍒嗙殑灝婇噸鎶鏈漢鎵嶏紝榪樹粎浠呯殑鍋滅暀鍦ㄦ妸杞歡鎶鏈漢鎵嶅綋浣滀漢鎵嶆満鍣ㄦ潵鐢ㄧ殑灝村艾澧冨湴銆傦紙濡傛灉浣犱笉鐞嗚В錛屼竴縐嶅彲鑳芥槸浣犵洰鍓嶄粎浠呬粠浜嬭繃鎶鏈伐浣滐紝浣犵殑鏈嬪弸鍦堝瓙閲屾妧鏈被鐨勬湅鍙嬪崰浜?jiǎn)澶у鏁板Q屼竴縐嶅彲鑳芥槸浣犺繕娌℃湁宸ヤ綔錛屼絾鍠滄璇繪瘮灝?dāng)銆傜洊鑼ㄧ殑浼犺錛夈?

]]>
浜旂紼嬪簭璁捐鏂規(guī)硶http://www.shnenglu.com/road420/archive/2010/09/16/126764.html娣遍們鑰?/dc:creator>娣遍們鑰?/author>Thu, 16 Sep 2010 06:45:00 GMThttp://www.shnenglu.com/road420/archive/2010/09/16/126764.htmlhttp://www.shnenglu.com/road420/comments/126764.htmlhttp://www.shnenglu.com/road420/archive/2010/09/16/126764.html#Feedback0http://www.shnenglu.com/road420/comments/commentRss/126764.htmlhttp://www.shnenglu.com/road420/services/trackbacks/126764.html

浜旂紼嬪簭璁捐鏂規(guī)硶

1.        緇撴瀯鍖栫▼搴忚璁?/span>

涓轟簡(jiǎn)鎻愰珮紼嬪簭鐨勫彲璇繪с佸彲閲嶇敤鎬х瓑錛岄愭笎鍑虹幇浜?jiǎn)灏喗E嬪簭寮鍙戜腑緇忓父鐢ㄥ埌鐨勭浉鍚岀殑鍔熻兘錛屾瘮濡傛暟瀛﹀嚱鏁拌繍綆椼佸瓧絎︿覆鎿嶄綔絳夛紝鐙珛鍑烘潵緙栧啓鎴愬嚱鏁幫紝鐒跺悗鎸夌収鐩鎬簰鍏崇郴鎴栧簲鐢ㄩ鍩熸眹闆嗗湪鐩稿悓鐨勬枃浠墮噷錛岃繖浜涙枃浠舵瀯鎴愪簡(jiǎn)鍑芥暟搴?/span>銆?/span>

鍑芥暟搴撴槸涓縐嶅淇℃伅鐨勫皝瑁咃紝灝嗗父鐢ㄧ殑鍑芥暟灝佽璧鋒潵錛屼漢浠笉蹇呯煡閬撳浣曞疄鐜板畠浠傚彧闇瑕佷簡(jiǎn)瑙e浣曡皟鐢ㄥ畠浠嵆鍙傚嚱鏁板簱鍙互琚涓簲鐢ㄧ▼搴忓叡浜紝鍦ㄥ叿浣撶紪紼嬬幆澧冧腑錛屼竴鑸兘鏈変竴涓ご鏂囦歡鐩鎬即錛屽湪榪欎釜澶存枃浠朵腑浠ユ爣鍑嗙殑鏂瑰紡瀹氫箟浜?jiǎn)搴撲腑姣忎釜鍑芥暟鐨勬帴鍙?/span>錛屾牴鎹繖浜涙帴鍙e艦寮忓彲浠ュ湪紼嬪簭涓殑浠諱綍鍦版柟璋冪敤鎵闇鐨勫嚱鏁般?/span>

鐢變簬鍑芥暟銆佸簱銆佹ā鍧楃瓑涓緋誨垪姒傚康鍜屾妧鏈殑鍑虹幇錛岀▼搴忚璁¢愭笎鍙樻垚濡傚浘鎵紺虹殑椋庢牸銆傜▼搴忚鍒嗚В鎴愪竴涓釜鍑芥暟妯″潡錛屽叾涓棦鏈夌郴緇熷嚱鏁幫紝涔熸湁鐢ㄦ埛瀹氫箟鐨勫嚱鏁般傞氳繃瀵瑰嚱鏁扮殑璋冪敤錛岀▼搴忕殑榪愯閫愭琚睍寮銆?/span>闃呰紼嬪簭鏃訛紝鐢變簬姣忎竴鍧楃殑鍔熻兘鐩稿鐙珛錛屽洜姝ゅ紼嬪簭緇撴瀯鐨勭悊瑙g浉瀵瑰鏄擄紝鍦ㄤ竴瀹氱▼搴︿笂緙撹В浜?jiǎn)绋嬪簭浠g爜鍙Lу拰鍙噸鐢ㄤ歡鐨勭煕鐩撅紝浣嗗茍鏈交搴曡В鍐崇煕鐩俱傞殢鐫璁$畻鏈虹▼搴忕殑瑙勬ā瓚婃潵瓚婂ぇ錛岃繖涓棶棰樺彉寰楁洿鍔犲皷閿愶紝浜庢槸鍑虹幇浜?jiǎn)鍙︿竴縐嶇紪紼嬮鏍?/span>鈥斺?/font>緇撴瀯鍖栫▼搴忚璁?/span>銆?/span>

鍦ㄧ粨鏋勫寲紼嬪簭璁捐涓紝浠諱綍紼嬪簭孌電殑緙栧啓閮藉熀浜?/span>3縐嶇粨鏋勶細(xì)鍒嗘敮緇撴瀯銆佸驚鐜粨鏋勫拰欏哄簭緇撴瀯銆?/span>紼嬪簭鍏鋒湁鏄庢樉鐨勬ā鍧楀寲鐗瑰緛錛屾瘡涓▼搴忔ā鍧楀叿鏈夋儫涓鐨勫嚭鍙e拰鍏ュ彛璇彞銆傜粨鏋勫寲紼嬪簭鐨勭粨鏋勭畝鍗曟竻鏅幫紝妯″潡鍖栧己錛屾弿榪版柟寮忚創(chuàng)榪戜漢浠範(fàn)鎯殑鎺ㄧ悊寮忔濈淮鏂瑰紡銆傚洜姝ゅ彲璇繪у己錛屽湪杞歡閲嶇敤鎬с佽蔣浠剁淮鎶ょ瓑鏂歸潰閮芥湁鎵榪涙錛屽湪澶у瀷杞歡寮鍙戝挨鍏舵槸澶у瀷縐戝涓庡伐紼嬭繍綆楄蔣浠剁殑寮鍙戜腑鍙戞尌浜?jiǎn)閲嶈浣滅敤銆傚洜姝ゅ埌鐩墠涓烘錛屼粛鏈夎澶氬簲鐢ㄧ▼搴忕殑寮鍙戦噰鐢ㄧ粨鏋勫寲紼嬪簭璁捐鎶鏈拰鏂規(guī)硶銆傚嵆浣垮湪鐩墠嫻佽鐨勯潰鍚戝璞¤蔣浠跺紑鍙戜腑涔熶笉鑳藉畬鍏ㄨ劚紱葷粨鏋勫寲紼嬪簭璁捐銆?/span>

 

2.        闈㈠悜瀵硅薄紼嬪簭璁捐

闈㈠悜瀵硅薄鐨勭▼搴忓焦璁℃柟娉曟槸紼嬪簭璁捐鐨勪竴縐嶆柊鏂規(guī)硶銆傛墍鏈夐潰鍚戝璞$殑紼嬪簭璁捐璇█涓鑸兘鍚湁涓変釜鏂歸潰鐨勮娉曟満鍒訛紝鍗沖璞″拰綾匯佸鎬佹с佺戶鎵挎с?/span>

1錛庡璞″拰綾?/span>

瀵硅薄鐨勬蹇點(diǎn)佸師鐞嗗拰鏂規(guī)硶鏄潰鍚戝璞$殑鐞嗗簭璁捐璇█鏅曢噸瑕佺殑鐗瑰緛銆傚璞℃槸鐢ㄦ埛瀹氫箟鐨勭被鍨嬶紙縐頒負(fù)綾伙級(jí)鐨勫彉閲忋備竴涓璞℃槸鏃㈠寘鍚暟鎹張鍖呭悎鎿嶄綔璇ユ暟鎹殑浠g爜錛堝嚱鏁幫級(jí)鐨勯昏緫瀹炰綋銆傚璞′腑鐨勮繖浜涙暟鎹拰鍑芥暟縐頒負(fù)瀵硅薄鐨勬垚鍛橈紝鍗蟲垚鍛樻暟鎹拰鎴愬憳鍑芥暟銆傚璞′腑鐨勬垚鍛樺垎涓哄叕鏈夌殑鍜岀鏈夌殑銆?span>鍏湁鎴愬憳鏄璞′笌澶栫晫鐨勬帴鍙g晫闈€傚鐣屽彧鑳介氳繃璋冪敤璁塊棶涓涓璞$殑鍏湁鎴愬憳鏉ュ疄鐜拌瀵硅薄鐨勫姛鑳姐傜鏈夋垚鍛樹綋鐜頒竴涓璞$殑緇勭粐褰㈠紡鍜屽姛鑳界殑瀹炵幇緇嗚妭銆傚鐣屾棤娉曞縐佹湁鎴愬憳榪涜鎿嶄綔銆?/span>綾誨璞℃寜鐓ц鑼冭繘琛屾搷浣滐紝灝嗘弿榪板瑙備簨鐗╃殑鏁版嵁琛ㄨ揪鍙?qiáng)瀵规暟鎹殑鎿嶄綔澶勭悊灏佽鍦ㄤ竴璧鳳紝鎴愬姛鍦板疄鐜頒簡(jiǎn)闈㈠悜瀵硅薄鐨勭▼搴忚璁°傚綋鐢ㄦ埛瀹氫箟浜?jiǎn)涓涓被綾誨瀷鍚庯紝灝卞彲浠ュ湪璇ョ被鍨嬬殑鍚嶄笅瀹氫箟鍙橀噺錛堝嵆瀵硅薄錛変簡(jiǎn)銆?span>綾繪槸緇撴瀯浣撶被鍨嬬殑鎵╁厖銆?/span>緇撴瀯浣撲腑寮曞叆鎴愬憳鍑芥暟騫惰瀹氫簡(jiǎn)鍏惰闂拰緇ф壙鍘熷垯鍚庝究鎴愪簡(jiǎn)綾匯?/span>

2錛庡鎬佹?/span>

闈㈠悜瀵硅薄鐨勭▼搴忚璁¤璦鏀寔澶氭佹?/span>錛屾妸涓涓帴鍙g敤浜庝竴綾繪椿鍔ㄣ傚嵆涓涓帴鍙e縐嶇畻娉?/span>銆傚叿浣撳疄鏂芥椂璇ラ夋嫨鍝竴涓畻娉曟槸鐢辯壒瀹氱殑璇硶鏈哄埗紜畾鐨勩?/span>C++緙栬瘧鏃跺拰榪愯鏃墮兘鏀寔澶氭佹с?span>緙栬瘧鏃剁殑澶氭佹т綋鐜板湪閲嶈澆鍑芥暟鍜岄噸杞借繍綆楃絳夋柟闈€傝繍琛屾椂鐨勫鎬佹т綋鐜板湪緇ф壙鍏崇郴鍙?qiáng)铏氬嚱鏁敖{夋柟闈€?/span>

3錛庣戶鎵挎?/span>

C++紼嬪簭涓紝鐢變竴涓被錛堢О涓哄熀綾伙級(jí)鍙互媧劇敓鍑烘柊綾伙紙縐頒負(fù)媧劇敓綾伙級(jí)銆傝繖縐嶆淳鐢熺殑璇硶鏈哄埗浣垮緱鏂扮被鐨勫嚭鐜拌交鏉捐嚜鐒?dòng)灱屼娇寰椾竴涓鏉備簨鐗╁彲浠ヨ欏虹悊鎴愮珷鍦板綊緇撲負(fù)鐢遍愬眰媧劇敓鐨勫璞℃弿榪般?/span>媧劇敓浣垮緱紼嬪簭涓畾涔夌殑綾誨憟灞傛緇撴瀯銆傚浜庡瓙灞傜殑瀵瑰弬鏃㈠叿鏈夊叾鐖跺眰瀵硅薄鐨勫叡鎬э紟鍙堝叿鏈夎嚜韜殑鐗規(guī)с傜戶鎵挎ф槸涓涓被瀵硅薄鑾峰緱鍏跺熀綾誨璞$壒鎬х殑榪囩▼銆?/span>C++涓弗鏍煎湴瑙勫畾浜?jiǎn)娲剧敓绫诲鍏跺熀绫荤殑鐟翩壙鍘熷垯鍜岃畨K棶鏉冮檺錛屼嬌寰楃▼搴忎腑瀵規(guī)暟鎹拰鍑芥暟鐨勮闂達(dá)紝闇鍦ㄥ鏃忓拰鏈嬪弸闂翠弗鏍煎尯鍒嗐?/span>

 

3.        浜嬩歡椹卞姩鐨勭▼搴忚璁?/span>

浜嬩歡椹卞姩鐨勭▼搴忚璁″疄闄呬笂鏄潰鍚戝璞$▼搴忚璁$殑涓涓簲鐢紝浣嗗畠鐩墠浠呴傜敤浜?/span>windows緋誨垪鎿嶄綔緋葷粺銆?/span>windows鐜涓殑搴旂敤紼嬪簭涓?/span>MS錛?/span>DOS鐜涓殑搴旂敤紼嬪簭榪愯鏈哄埗涓嶅悓銆佽璁$▼搴忕殑鏂瑰紡涔熶笉涓鏍楓?/span>windows紼嬪簭閲囩敤浜嬩歡椹卞姩鏈哄埗榪愯錛岃繖縐嶄簨浠墮┍鍔ㄧ▼搴忕敱浜嬩歡鐨勫彂鐢熶笌鍚︽潵鎺у埗錛岀郴緇熶腑姣忎釜瀵硅薄鐘舵佸壇鏀瑰彉閮芥槸浜嬩歡鍙戠敓鐨勫師鐢辨垨緇撴灉錛岃璁$▼搴忔椂闇浠ヤ竴縐嶉潪欏哄簭鏂瑰紡澶勭悊浜嬩歡錛屼笌欏哄簭鐨勩?span>榪囩▼椹卞姩鐨勪紶緇熺▼搴忚璁℃柟娉曡駿寮?/span>銆?/span>

浜嬩歡涔熺О娑堟伅錛屽惈涔夋瘮杈冨箍娉涳紝甯歌鐨勪簨浠舵湁榧犳爣浜嬩歡(濡傛皯鏍囩Щ鍔ㄣ佸崟鍑匯佹帬榪囩獥鍙h竟鐣?/span>)銆侀敭鐩樹簨浠?/span>(濡傛寜閿殑鍘嬩笅涓庢嬀璧?/span>)絳夊縐嶃傚簲鐢ㄧ▼搴忚繍琛岀粡榪囦竴緋誨垪蹇呰鐨勫垵濮嬪寲鍚庯紝灝嗚繘鍏ョ瓑寰呯姸鎬侊紝絳夊緟鏈変簨浠跺彂鐢燂紝涓鏃︿簨浠跺嚭鐜幫紝紼嬪簭灝辮嬋媧誨茍榪涜鐩稿簲澶勭悊銆?/span>

浜嬩歡椹卞姩紼嬪簭璁捐鏄洿緇曠潃娑堟伅鐨勪駭鐢熶笌澶勭悊榪涜鐨勶紟娑堟伅鍙潵鑷▼搴忎腑鐨勬煇涓璞★紝涔熷彲鐢辯敤鎴楓?/span>wlndow s鎴栬繍琛岀潃鐨勫叾浠栧簲鐢ㄧ▼搴忎駭鐢熴傛瘡褰撲簨浠跺彂鐢熸椂錛?/span>Windows淇樿幏鏈夊叧浜嬩歡錛岀劧鍚庡皢娑堟伅鍒嗗埆杞彂鍒扮浉鍏沖簲鐢ㄧ▼搴忎腑鐨勬湁鍏沖璞★紝闇瑕佸娑堟伅浣滃嚭鍙嶅簲鐨勫璞″簲璇ユ彁渚涙秷鎭鐞嗗嚱鏁幫紝閫氳繃榪欎釜娑堟伅澶勭悊鍑芥暟瀹炵幇瀵硅薄鐨勪竴縐嶅姛鑳芥垨琛屼負(fù)銆傛墍浠ョ紪鍐欎簨浠墮┍鍔ㄧ▼搴忕殑澶ч儴鍒嗗伐浣滄槸涓哄悇涓璞?/span>(綾?/span>)娣誨姞鍚勭娑堟伅鐨勫鐞嗗嚱鏁?/span>銆傜敱浜庝竴涓璞″彲浠ユ槸娑堟伅鐨勬帴鏀惰咃紝鍚屾椂涔熷彲鑳芥槸娑堟伅鐨勫彂閫佽咃紝鎵鍙戦佺殑娑堟伅涓庢帴鏀跺埌鐨勬秷鎭篃鍙互鏄浉鍚岀殑娑堟伅錛岃屾湁浜涙秷鎭殑鍙戝嚭鏃墮棿鏄棤娉曢鐭ョ殑(姣斿鍏充簬閿洏鐨勬秷鎭?/span>)錛屽洜姝ゅ簲鐢ㄧ▼搴忕殑鎵ц欏哄簭鏄棤娉曢鐭ョ殑銆?/span>

4.        閫昏緫寮忓璞$▼搴忚璁?/span>

閫昏緫寮忕▼搴忚璁$殑姒傚康鏉ヨ嚜閫昏緫寮忕▼搴忚璁¤璦Prolog榪欎竴鏇劇粡鍦ㄨ綆楁満棰嗗煙寮曡搗闇囧姩鐨勬棩鏈?/span>絎簲浠?/span>璁$畻鏈虹殑鍩烘湰緋葷粺璇█錛屽湪榪欑絎簲浠?/span>璁$畻鏈轟腑錛?/span>Prolog鐨勫湴浣嶇浉褰撲簬褰撳墠璁$畻鏈轟腑鐨勬満鍣ㄨ璦銆?/span>

Prolog涓昏搴旂敤鍦ㄤ漢宸ユ櫤鑳介鍩?/span>錛屽湪鑷劧璇█澶勭悊銆佹暟鎹簱鏌ヨ銆佺畻娉曟弿榪扮瓑鏂歸潰閮芥湁搴旂敤錛?span>灝ゅ叾閫備簬浣滀負(fù)涓撳緋葷粺鐨勫紑鍙戝伐鍏楓?/span>

Prolog鏄竴縐嶉檲榪板紡璇█錛屽畠涓嶆槸涓縐嶄弗鏍肩殑閫氱敤紼嬪簭璁捐璇█錛屼嬌鐢?/span>Prolog緙栧啓紼嬪簭涓嶉渶瑕佹弿榪板叿浣撶殑瑙i榪囩▼銆佸彧闇緇撳嚭涓浜涘繀瑕佺殑浜嬪疄鍜岃鍒欙紝榪欎簺瑙勫垯鏄В鍐抽棶棰樻柟娉曠殑瑙勮寖璇存槑錛屾牴鎹繖浜涜鍒欏拰浜嬪疄錛庤綆楁満鍒╃敤娓瘝閫昏緫錛岄氳繃婕旂粠鎺ㄧ悊寰楀埌姹傝В闂鐨勬墽琛屽簭鍒椼?/span>

5.        騫惰紼嬪簭璁捐

涓涓湁瀹為檯搴旂敤鐨勫茍琛岀畻娉曪紝鏈緇堟昏鍦ㄥ茍琛屾満涓婂疄鐜幫紝涓烘棣栧厛灝辮灝嗗茍琛岀畻娉曡漿鍖栦負(fù)騫惰紼嬪簭錛屾榪囩▼灝辨槸鎵璋撶殑騫惰紼嬪簭璁捐(Parallel Program)銆傚畠瑕佹眰綆楁硶璁捐鑰呫佺郴緇熺粨鏋勫笀鍜岃蔣浠跺伐浣滆呭箍娉涢綣佺殑浜や簰銆傚洜涓鴻璁″茍琛岀▼搴忔秹鍙?qiáng)鍒扮殑鐭ヨ瘑闈㈣緝骞垮Q屼富瑕佸寘鎷搷浣滅郴緇熶腑鐨勬湁鍏崇煡璇嗗拰浼樺寲緙栬瘧鏂歸潰鐨勭煡璇嗐傛搷浣滅郴緇熷唴瀹歸潪甯鎬赴瀵岋紝騫惰紼嬪簭涓渶鍩烘湰鐨勮綆楄绱犲浠誨姟銆佽繘紼嬨佺嚎紼嬬瓑鍩烘湰姒傚康銆佸悓姝ユ満鍒跺拰閫氫俊鎿嶄綔絳夈?/span>

鐩墠騫惰紼嬪簭璁捐鐨勭姸鍐墊槸錛?/span>鈶?/span>騫惰杞歡鐨勫彂灞曡惤鍚庝簬騫惰紜歡錛?/span>鈶?/span>鍜屼覆琛岀郴緇熶笌搴旂敤杞歡鐩告瘮錛岀幇浠婄殑騫惰緋葷粺涓庡簲鐢ㄨ蔣浠剁敋灝戜笖涓嶆垚鐔燂紱鈶?/span>騫惰杞歡鐨勭己涔忔槸鍙戝睍騫惰璁$畻鐨勪富瑕侀殰紕嶏紱鈶?/span>涓嶅垢鐨勬槸錛岃繖縐嶇姸鎬佷技涔庝粛鍦ㄧ戶緇潃銆傜┒鍏跺師鍥犳槸騫惰紼嬪簭璁捐榪滄瘮涓茶紼嬪簭璁捐澶嶆潅錛?/span>鈶?/span>騫惰紼嬪簭璁捐涓嶄絾鍖呭惈浜?jiǎn)涓茶绋嬪簭璁捐锛岄潰涓敇q樺寘鍚簡(jiǎn)鏇村鐨勫瘜鏈夋寫鎴樻х殑闂錛?/span>鈶?/span>涓茶紼嬪簭璁捐浠呮湁涓涓櫘閬嶈鎺ュ彈鐨勫啹·璇轟緷鏇艱綆楁ā鍨嬶紝鑰屽茍琛岃綆楁ā鍨嬭櫧鏈夊ソ澶氾紝浣嗘病鏈変竴涓彲琚叡鍚岃鍙殑鍍忓啹·璇轟緷鏇奸偅鏍風(fēng)殑浼樼妯″瀷錛?/span>鈶?/span>騫惰紼嬪簭璁捐瀵圭幆澧冨伐鍏?/span>(濡傜紪璇戙佹煡閿欑瓑)鐨勮姹傝繙姣斾覆琛岀▼搴忚璁″厛榪涘緱澶氾紱鈶?/span>涓茶紼嬪簭璁捐姣旇緝閫傚悎浜庤嚜鐒朵範(fàn)鎯紝涓斾漢浠湪榪囧幓縐瘡浜?jiǎn)澶ч噺鐨劸~栫▼鐭ヨ瘑銆佺粡楠屽拰瀹濊吹鐨勮蔣浠惰儲(chǔ)瀵屻?/span>



]]>
紼嬪簭鐨勫唴瀛樺垎閰?/title><link>http://www.shnenglu.com/road420/archive/2010/09/16/126758.html</link><dc:creator>娣遍們鑰?/dc:creator><author>娣遍們鑰?/author><pubDate>Thu, 16 Sep 2010 06:22:00 GMT</pubDate><guid>http://www.shnenglu.com/road420/archive/2010/09/16/126758.html</guid><wfw:comment>http://www.shnenglu.com/road420/comments/126758.html</wfw:comment><comments>http://www.shnenglu.com/road420/archive/2010/09/16/126758.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/road420/comments/commentRss/126758.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/road420/services/trackbacks/126758.html</trackback:ping><description><![CDATA[涓涓敱c/C++緙栬瘧鐨勭▼搴忓崰鐢ㄧ殑鍐呭瓨鍒嗕負(fù)浠ヤ笅鍑犱釜閮ㄥ垎<br><font color=#0000ff>1銆佹爤鍖猴紙stack錛夆?/font> 鐢辯紪璇戝櫒鑷姩鍒嗛厤閲婃斁 錛屽瓨鏀懼嚱鏁扮殑鍙傛暟鍊鹼紝灞閮ㄥ彉閲忕殑鍊肩瓑銆傚叾鎿嶄綔鏂瑰紡綾諱技浜庢暟鎹粨鏋勪腑鐨勬爤銆?br><font color=#0000ff>2銆佸爢鍖猴紙heap錛?/font> 鈥?涓鑸敱紼嬪簭鍛樺垎閰嶉噴鏀撅紝 鑻ョ▼搴忓憳涓嶉噴鏀撅紝紼嬪簭緇撴潫鏃跺彲鑳界敱O(jiān)S鍥炴敹 銆傛敞鎰忓畠涓庢暟鎹粨鏋勪腑鐨勫爢鏄袱鍥炰簨錛屽垎閰嶆柟寮忓掓槸綾諱技浜庨摼琛紝鍛靛懙銆?br><font color=#0000ff>3銆佸叏灞鍖猴紙闈?rùn)鎬佸尯錛夛紙static錛夆旓紝</font>鍏ㄥ眬鍙橀噺鍜岄潤(rùn)鎬佸彉閲忕殑瀛樺偍鏄斁鍦ㄤ竴鍧楃殑錛屽垵濮嬪寲鐨勫叏灞鍙橀噺鍜岄潤(rùn)鎬佸彉閲忓湪涓鍧楀尯鍩燂紝 鏈垵濮嬪寲鐨勫叏灞鍙橀噺鍜屾湭鍒濆鍖栫殑闈?rùn)鎬佸彉閲忓湪鐩擱偦鐨勫彟涓鍧楀尯鍩熴?- 紼嬪簭緇撴潫鍚庢湁緋葷粺閲婃斁<br><font color=#0000ff>4銆佹枃瀛楀父閲忓尯</font> 鈥斿父閲忓瓧絎︿覆灝辨槸鏀懼湪榪欓噷鐨勩?紼嬪簭緇撴潫鍚庣敱緋葷粺閲婃斁<br><font color=#0000ff>5銆佺▼搴忎唬鐮佸尯</font>鈥斿瓨鏀懼嚱鏁頒綋鐨勪簩榪涘埗浠g爜銆? <p><font size=4><strong>鍫嗗拰鏍堢殑鐞嗚鐭ヨ瘑</strong></font><br><font color=#0000ff>2.1鐢寵鏂瑰紡</font><br><font color=#ff00ff>stack:<br><u>鐢辯郴緇熻嚜鍔ㄥ垎閰嶃?/u></font> 渚嬪錛屽0鏄庡湪鍑芥暟涓竴涓眬閮ㄥ彉閲?int b; 緋葷粺鑷姩鍦ㄦ爤涓負(fù)b寮杈熺┖闂?br><font color=#ff0000>heap:<br>闇瑕佺▼搴忓憳鑷繁鐢寵</font><font color=#ff0000>錛屽茍鎸囨槑澶у皬錛屽湪c涓璵alloc鍑芥暟</font><br>濡俻1 = (char *)malloc(10);<br>鍦–++涓敤new榪愮畻絎?br>濡俻2 = (char *)malloc(10);<br>浣嗘槸娉ㄦ剰p1銆乸2鏈韓鏄湪鏍堜腑鐨勩?br>2.2<font color=#0000ff>鐢寵鍚庣郴緇熺殑鍝嶅簲</font><br>鏍堬細(xì)<font color=#ff00ff>鍙鏍堢殑鍓╀綑絀洪棿澶т簬鎵鐢寵絀洪棿</font>錛岀郴緇熷皢涓虹▼搴忔彁渚涘唴瀛橈紝鍚﹀垯灝嗘姤寮傚父鎻愮ず鏍堟孩鍑恒?br>鍫嗭細(xì)<font color=#ff0000>棣栧厛搴旇鐭ラ亾鎿嶄綔緋葷粺鏈変竴涓褰曠┖闂插唴瀛樺湴鍧鐨勯摼琛?/font>錛屽綋緋葷粺鏀跺埌紼嬪簭鐨勭敵璇鋒椂錛?br>浼?閬嶅巻璇ラ摼琛紝瀵繪壘絎竴涓┖闂村ぇ浜庢墍鐢寵絀洪棿鐨勫爢緇撶偣錛岀劧鍚庡皢璇ョ粨鐐逛粠絀洪棽緇撶偣閾捐〃涓垹闄わ紝騫跺皢璇ョ粨鐐圭殑絀洪棿鍒嗛厤緇欑▼搴忥紝鍙﹀錛屽浜庡ぇ澶氭暟緋葷粺錛屼細(xì)鍦ㄨ繖鍧楀唴 瀛樼┖闂翠腑鐨勯鍦板潃澶勮褰曟湰嬈″垎閰嶇殑澶у皬錛岃繖鏍鳳紝浠g爜涓殑delete璇彞鎵嶈兘姝g‘鐨勯噴鏀炬湰鍐呭瓨絀洪棿銆傚彟澶栵紝鐢變簬鎵懼埌鐨勫爢緇撶偣鐨勫ぇ灝忎笉涓瀹氭濂界瓑浜庣敵璇風(fēng)殑澶?灝忥紝緋葷粺浼?xì)鑷姩鐨劄畣澶氫綑鐨勯偅閮ㄥ垎閲嶆柊鏀惧叆绌洪棽閾捐〃涓?br><font color=#0000ff>2.3鐢寵澶у皬鐨勯檺鍒?/font><br><font color=#ff00ff>鏍堬細(xì)鍦╓indows涓?鏍堟槸鍚戜綆鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄竴鍧?榪炵畫鐨勫唴瀛樼殑鍖哄煙</font>銆傝繖鍙ヨ瘽鐨勬剰鎬濇槸鏍堥《鐨勫湴鍧鍜屾爤鐨勬渶澶у閲忔槸緋葷粺棰勫厛瑙勫畾濂界殑錛屽湪 WINDOWS涓嬶紝鏍堢殑澶у皬鏄?M錛堜篃鏈夌殑璇存槸1M錛屾諱箣鏄竴涓紪璇戞椂灝辯‘瀹氱殑甯告暟錛夛紝濡傛灉鐢寵鐨勭┖闂磋秴榪囨爤鐨勫墿浣欑┖闂存椂錛屽皢鎻愮ずoverflow銆傚洜 姝わ紝鑳戒粠鏍堣幏寰楃殑絀洪棿杈冨皬銆?br><font color=#ff0000>鍫嗭細(xì)鍫嗘槸鍚戦珮鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄笉榪炵畫鐨勫唴瀛樺尯鍩熴?/font>榪欐槸鐢變簬緋葷粺鏄敤閾捐〃鏉ュ瓨鍌ㄧ殑絀洪棽鍐呭瓨鍦板潃鐨勶紝鑷劧鏄笉榪炵畫鐨勶紝鑰岄摼琛ㄧ殑閬嶅巻鏂瑰悜鏄敱浣庡湴鍧鍚戦珮鍦板潃銆傚爢鐨勫ぇ灝忓彈闄愪簬璁$畻鏈虹郴緇熶腑鏈夋晥鐨勮櫄鎷熷唴瀛樸傜敱姝ゅ彲瑙侊紝鍫嗚幏寰楃殑絀洪棿姣旇緝鐏墊椿錛屼篃姣旇緝澶с?br><font color=#0000ff>2.4鐢寵鏁堢巼鐨勬瘮杈冿細(xì)<br></font><font color=#ff00ff>鏍堢敱緋葷粺鑷姩鍒嗛厤錛岄熷害杈冨揩銆備絾紼嬪簭鍛樻槸鏃犳硶鎺у埗鐨勩?/font><br><font color=#ff0000>鍫嗘槸鐢眓ew鍒嗛厤鐨勫唴瀛橈紝涓鑸熷害姣旇緝鎱紝鑰屼笖瀹規(guī)槗浜х敓鍐呭瓨紕庣墖,涓嶈繃鐢ㄨ搗鏉ユ渶鏂逛究.</font><br>鍙﹀錛屽湪WINDOWS涓嬶紝鏈濂界殑鏂瑰紡鏄敤VirtualAlloc鍒嗛厤鍐呭瓨錛屼粬涓嶆槸鍦ㄥ爢錛屼篃涓嶆槸鍦ㄦ爤鏄洿鎺ュ湪榪涚▼鐨勫湴鍧絀洪棿涓繚鐣欎竴蹇唴瀛橈紝铏界劧鐢ㄨ搗鏉ユ渶涓嶆柟渚褲備絾鏄熷害錛?涔熸渶鐏墊椿<br><font color=#0000ff>2.5鍫嗗拰鏍堜腑鐨勫瓨鍌ㄥ唴瀹?/font><br>鏍堬細(xì) 鍦ㄥ嚱鏁拌皟鐢ㄦ椂錛岀涓涓繘鏍堢殑鏄富鍑芥暟涓悗鐨勪笅涓鏉℃寚浠わ紙鍑芥暟璋冪敤璇彞鐨勪笅涓鏉″彲鎵ц璇彞錛夌殑鍦板潃錛岀劧鍚庢槸鍑芥暟鐨勫悇涓弬鏁幫紝鍦ㄥぇ澶氭暟鐨凜緙栬瘧鍣ㄤ腑錛屽弬鏁版槸鐢卞彸寰宸﹀叆鏍堢殑錛岀劧鍚庢槸鍑芥暟涓殑灞閮ㄥ彉閲忋傛敞鎰忛潤(rùn)鎬佸彉閲忔槸涓嶅叆鏍堢殑銆?br>褰撴湰嬈″嚱鏁拌皟鐢ㄧ粨鏉熷悗錛屽眬閮ㄥ彉閲忓厛鍑烘爤錛岀劧鍚庢槸鍙傛暟錛屾渶鍚庢爤欏舵寚閽堟寚鍚戞渶寮濮嬪瓨鐨勫湴鍧錛屼篃灝辨槸涓誨嚱鏁頒腑鐨勪笅涓鏉℃寚浠わ紝紼嬪簭鐢辮鐐圭戶緇繍琛屻?br>鍫嗭細(xì)涓鑸槸鍦ㄥ爢鐨勫ご閮ㄧ敤涓涓瓧鑺傚瓨鏀懼爢鐨勫ぇ灝忋傚爢涓殑鍏蜂綋鍐呭鏈夌▼搴忓憳瀹夋帓銆?br><font color=#0000ff>2.6瀛樺彇鏁堢巼鐨勬瘮杈?/font><br><br>char s1[] = "aaaaaaaaaaaaaaa";<br>char *s2 = "bbbbbbbbbbbbbbbbb";<br>aaaaaaaaaaa鏄湪榪愯鏃跺埢璧嬪肩殑錛?br>鑰宐bbbbbbbbbb鏄湪緙栬瘧鏃跺氨紜畾鐨勶紱<br>浣嗘槸錛屽湪浠ュ悗鐨勫瓨鍙栦腑錛屽湪鏍堜笂鐨勬暟緇勬瘮鎸囬拡鎵鎸囧悜鐨勫瓧絎︿覆(渚嬪鍫?蹇?br>姣斿錛?br>#include<br>void main()<br>{<br>char a = 1;<br>char c[] = "1234567890";<br>char *p ="1234567890";<br>a = c[1];<br>a = p[1];<br>return;<br>}<br>瀵瑰簲鐨勬眹緙栦唬鐮?br>10: a = c[1];<br>00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]<br>0040106A 88 4D FC mov byte ptr [ebp-4],cl<br>11: a = p[1];<br>0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]<br>00401070 8A 42 01 mov al,byte ptr [edx+1]<br>00401073 88 45 FC mov byte ptr [ebp-4],al<br>絎竴縐嶅湪璇誨彇鏃剁洿鎺ュ氨鎶婂瓧絎︿覆涓殑鍏冪礌璇誨埌瀵勫瓨鍣╟l涓紝鑰岀浜岀鍒欒鍏堟妸鎸噀dx涓紝鍦ㄦ牴鎹甧dx璇誨彇瀛楃錛屾樉鐒舵參浜?jiǎn)銆?br><br><strong>2.7灝忕粨錛?/strong><br>鍫嗗拰鏍堢殑鍖哄埆鍙互鐢ㄥ涓嬬殑姣斿柣鏉ョ湅鍑猴細(xì)<br><font color=#ff00ff>浣跨敤鏍堝氨璞℃垜浠幓楗閲屽悆楗?/font>錛屽彧綆$偣鑿滐紙鍙戝嚭鐢寵錛夈佷粯閽便佸拰鍚冿紙浣跨敤錛夛紝鍚冮ケ浜?jiǎn)灏辫祹图屼笉蹇呯悊浼?xì)鍒囪彍銆佹礂鑿滅瓑鍑嗗宸ヤ綔鍜屾礂紕椼佸埛閿呯瓑鎵熬宸ヤ綔錛?font color=#ff00ff>浠栫殑濂藉鏄揩鎹鳳紝浣嗘槸鑷敱搴﹀皬銆?/font><br><font color=#ff0000>浣跨敤鍫嗗氨璞℃槸鑷繁鍔ㄦ墜鍋氬枩嬈㈠悆鐨勮彍鑲?/font>錛屾瘮杈冮夯鐑?chǔ)锛屼絾鏄?font color=#ff0000>杈冪鍚堣嚜宸辯殑鍙e懗錛岃屼笖鑷敱搴﹀ぇ</font>銆?/p> <img src ="http://www.shnenglu.com/road420/aggbug/126758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/road420/" target="_blank">娣遍們鑰?/a> 2010-09-16 14:22 <a href="http://www.shnenglu.com/road420/archive/2010/09/16/126758.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>浠g爜娉ㄥ叆鐨勪笁縐嶆柟娉?/title><link>http://www.shnenglu.com/road420/archive/2010/09/16/126755.html</link><dc:creator>娣遍們鑰?/dc:creator><author>娣遍們鑰?/author><pubDate>Thu, 16 Sep 2010 06:06:00 GMT</pubDate><guid>http://www.shnenglu.com/road420/archive/2010/09/16/126755.html</guid><wfw:comment>http://www.shnenglu.com/road420/comments/126755.html</wfw:comment><comments>http://www.shnenglu.com/road420/archive/2010/09/16/126755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/road420/comments/commentRss/126755.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/road420/services/trackbacks/126755.html</trackback:ping><description><![CDATA[<ul> <li><a ><u><font color=#800080>Windows 閽╁瓙</font></u></a> <li><a href="http://www.vckbase.com/document/viewdoc/?id=1886#CreateRemoteThread_鍜宊LoadLibrary_鎶鏈?><u><font color=#800080>CreateRemoteThread 鍜?LoadLibrary 鎶鏈?/font></u></a> <br><a ><u><font color=#800080>鈥斺旇繘紼嬮棿閫氫俊</font></u></a> <li><a href="http://www.vckbase.com/document/viewdoc/?id=1886#CreateRemoteThread_鍜宊WriteProcessMemory_鎶鏈?><u><font color=#800080>CreateRemoteThread 鍜?WriteProcessMemory 鎶鏈?/font></u></a> <br>鈥斺?a ><u><font color=#800080>濡備綍鐢ㄨ鎶鏈瓙綾誨寲榪滅▼鎺т歡</font></u></a> <br>鈥斺?a href="http://www.vckbase.com/document/viewdoc/?id=1886#浣曟椂浣跨敤_CreateRemoteThread_鍜宊WriteProcessMemory_鎶鏈?><u><font color=#800080>浣曟椂浣跨敤 CreateRemoteThread 鍜?WriteProcessMemory 鎶鏈?/font></u></a> <li><a href="http://www.vckbase.com/document/viewdoc/?id=1886#緇撴潫璇?><u><font color=#800080>緇撴潫璇?/font></u></a> <li><a ><u><font color=#800080>闄勫綍A</font></u></a> <li><a ><u><font color=#800080>闄勫綍B</font></u></a> <li><a ><u><font color=#800080>闄勫綍C</font></u></a> <li><a ><u><font color=#800080>闄勫綍D</font></u></a> <li><a ><u><font color=#800080>闄勫綍E</font></u></a> <li><a ><u><font color=#800080>闄勫綍F</font></u></a> <li><a href="http://www.vckbase.com/document/viewdoc/?id=1886#鍙傝冭祫鏂?><u><font color=#800080>鍙傝冭祫鏂?/font></u></a> <br></li> </ul> <p>綆浠?/p> <p>銆銆鏈枃灝嗚璁哄浣曟妸浠g爜娉ㄥ叆涓嶅悓鐨勮繘紼嬪湴鍧絀洪棿錛岀劧鍚庡湪璇ヨ繘紼嬬殑涓婁笅鏂囦腑鎵ц娉ㄥ叆鐨勪唬鐮併?鎴戜滑鍦ㄧ綉涓婂彲浠ユ煡鍒頒竴浜涚獥鍙?瀵嗙爜渚︽祴鐨勫簲鐢ㄤ緥瀛愶紝緗戜笂鐨勮繖浜涚▼搴忓ぇ澶氶兘渚濊禆 Windows 閽╁瓙鎶鏈潵瀹炵幇銆傛湰鏂囧皢璁ㄨ闄や簡(jiǎn)浣跨敤 Windows 閽╁瓙鎶鏈互澶栫殑鍏跺畠鎶鏈潵瀹炵幇榪欎釜鍔熻兘銆傚鍥句竴鎵紺猴細(xì)</p> <p><img height=320 src="http://www.vckbase.com/document/journal/vckbase55/images/winspy1.gif" width=622 border=0></p> <p>鍥句竴銆WinSpy 瀵嗙爜渚︽祴紼嬪簭</p> <p>涓轟簡(jiǎn)鎵懼埌瑙e喅闂鐨勬柟娉曘傞鍏堣鎴戜滑綆鍗曞洖欏句竴涓嬮棶棰樿儗鏅?br>銆銆瑕?#8220;璇誨彇”鏌愪釜鎺т歡鐨勫唴瀹光斺旀棤璁鴻繖涓帶浠舵槸鍚﹀睘浜庡綋鍓嶇殑搴旂敤紼嬪簭鈥斺旈氬父閮芥槸鍙戦?WM_GETTEXT 娑堟伅鏉ュ疄鐜般傝繖涓妧鏈篃鍚屾牱搴旂敤鍒扮紪杈戞帶浠訛紝浣嗘槸濡傛灉璇ョ紪杈戞帶浠跺睘浜庡彟澶栦竴涓繘紼嬪茍璁劇疆浜?ES_PASSWORD 寮忔牱錛岄偅涔堜笂闈㈣鐨勬柟娉曞氨琛屼笉閫氫簡(jiǎn)銆傜敤 WM_GETTEXT 鏉ヨ幏鍙栨帶浠剁殑鍐呭鍙傜敤浜庤繘紼?#8220;鎷ユ湁”瀵嗙爜鎺т歡鐨勬儏鍐點(diǎn)傛墍浠ユ垜浠殑闂鍙樻垚浜?jiǎn)濡備綍鍦ㄥ彟澶栦竴涓繘紼嬬殑鍦板潃絀洪棿鎵ц錛?/p> <pre>::SendMessage( hPwdEdit, WM_GETTEXT, nMaxChars, psBuffer );</pre> <p>閫氬父鏈変笁縐嶅彲鑳芥ф潵瑙e喅榪欎釜闂銆?/p> <ol> <li>灝嗕綘鐨勪唬鐮佹斁鍏ユ煇涓?DLL錛岀劧鍚庨氳繃 Windows 閽╁瓙鏄犲皠璇LL鍒拌繙紼嬭繘紼嬶紱 <li>灝嗕綘鐨勪唬鐮佹斁鍏ユ煇涓?DLL錛岀劧鍚庨氳繃 CreateRemoteThread 鍜?LoadLibrary 鎶鏈槧灝勮DLL鍒拌繙紼嬭繘紼嬶紱 <li>濡傛灉涓嶅啓鍗曠嫭鐨?DLL錛屽彲浠ョ洿鎺ュ皢浣犵殑浠g爜鎷瘋礉鍒拌繙紼嬭繘紼嬧斺旈氳繃 WriteProcessMemory鈥斺斿茍鐢?CreateRemoteThread 鍚姩瀹冪殑鎵ц銆傛湰鏂囧皢鍦ㄧ涓夐儴鍒嗚緇嗘弿榪拌鎶鏈疄鐜扮粏鑺傦紱 </li> </ol> <p>絎竴閮ㄥ垎錛?<a name=Windows_閽╁瓙>Windows 閽╁瓙</a></p> <p>鑼冧緥紼嬪簭鈥斺斿弬瑙丠ookSpy 鍜孒ookInjEx</p> <p>銆銆Windows 閽╁瓙涓昏浣滅敤鏄洃鎺ф煇浜涚嚎紼嬬殑娑堟伅嫻併傞氬父鎴戜滑灝嗛挬瀛愬垎涓烘湰鍦伴挬瀛愬拰榪滅▼閽╁瓙浠ュ強(qiáng)緋葷粺綰ч挬瀛愶紝鏈湴閽╁瓙涓鑸洃鎺у睘浜庢湰榪涚▼鐨勭嚎紼嬬殑娑堟伅嫻侊紝榪滅▼閽╁瓙鏄嚎紼嬩笓鐢ㄧ殑錛岀敤浜庣洃鎺у睘浜庡彟澶栬繘紼嬬殑綰跨▼娑堟伅嫻併傜郴緇熺駭閽╁瓙鐩戞帶榪愯鍦ㄥ綋鍓嶇郴緇熶腑鐨勬墍鏈夌嚎紼嬬殑娑堟伅嫻併?br>銆銆濡傛灉閽╁瓙浣滅敤鐨勭嚎紼嬪睘浜庡彟澶栫殑榪涚▼錛岄偅涔堜綘鐨勯挬瀛愯繃紼嬪繀欏婚┗鐣欏湪鏌愪釜鍔ㄦ侀摼鎺ュ簱錛圖LL錛変腑銆傜劧鍚庣郴緇熸槧灝勫寘鍚挬瀛愯繃紼嬬殑DLL鍒伴挬瀛愪綔鐢ㄧ殑綰跨▼鐨勫湴鍧絀洪棿銆俉indows灝嗘槧灝勬暣涓?DLL錛岃屼笉浠呬粎鏄挬瀛愯繃紼嬨傝繖灝辨槸涓轟粈涔?Windows 閽╁瓙鑳借鐢ㄤ簬灝嗕唬鐮佹敞鍏ュ埌鍒殑榪涚▼鍦板潃絀洪棿鐨勫師鍥犮?br>銆銆鏈枃鎴戜笉鎵撶畻娑夊強(qiáng)閽╁瓙鐨勫叿浣撶粏鑺傦紙鍏充簬閽╁瓙鐨勭粏鑺傝鍙傝 MSDN 搴撲腑鐨?SetWindowHookEx API錛夛紝浣嗘垜鍦ㄦ瑕佺粰鍑轟袱涓緢鏈夌敤蹇?jī)寰楀Q屽湪鐩稿叧鏂囨。涓綘鏄壘涓嶅埌榪欎簺鍐呭鐨勶細(xì)</p> <ol> <li>鍦ㄦ垚鍔熻皟鐢?SetWindowsHookEx 鍚庯紝緋葷粺鑷姩鏄犲皠 DLL 鍒伴挬瀛愪綔鐢ㄧ殑綰跨▼鍦板潃絀洪棿錛屼絾涓嶅繀绔嬪嵆鍙戠敓鏄犲皠錛屽洜涓?Windows 閽╁瓙閮芥槸娑堟伅錛孌LL 鍦ㄦ秷鎭簨浠跺彂鐢熷墠騫舵病鏈変駭鐢熷疄闄呯殑鏄犲皠銆備緥濡傦細(xì)<br>銆銆濡傛灉浣犲畨瑁呬竴涓挬瀛愮洃鎺ф煇浜涚嚎紼嬶紙WH_CALLWNDPROC錛夌殑闈為槦鍒楁秷鎭紝鍦ㄦ秷鎭瀹為檯鍙戦佸埌錛堟煇浜涚獥鍙g殑錛夐挬瀛愪綔鐢ㄧ殑綰跨▼涔嬪墠錛岃DLL 鏄笉浼?xì)琚槧灏勫埌杩溄E嬭繘紼嬬殑銆傛崲鍙ヨ瘽璇達(dá)紝濡傛灉 UnhookWindowsHookEx 鍦ㄦ煇涓秷鎭鍙戦佸埌閽╁瓙浣滅敤鐨勭嚎紼嬩箣鍓嶈璋冪敤錛孌LL 鏍規(guī)湰涓嶄細(xì)琚槧灝勫埌榪滅▼榪涚▼錛堝嵆浣?SetWindowsHookEx 鏈韓璋冪敤鎴愬姛錛夈備負(fù)浜?jiǎn)寮哄埗杩涜鏄牉畡锛屽湪璋冪?SetWindowsHookEx 涔嬪悗椹笂鍙戦佷竴涓簨浠跺埌鐩稿叧鐨勭嚎紼嬨?br>銆銆鍦║nhookWindowsHookEx浜?jiǎn)涔嬪悗锛屽浜庢病鏈夋槧灏勭殑DLL澶勭悊鏂規(guī)硶涔熶竴鏍楓傚彧鏈夊湪瓚沖鐨勪簨浠跺彂鐢熷悗錛孌LL鎵嶄細(xì)鏈夌湡姝g殑鏄犲皠銆? <li>褰撲綘瀹夎閽╁瓙鍚庯紝瀹冧滑鍙兘褰卞搷鏁翠釜緋葷粺寰楁ц兘錛堝挨鍏舵槸緋葷粺綰ч挬瀛愶級(jí)錛屼絾鏄綘鍙互寰堝鏄撹В鍐寵繖涓棶棰橈紝濡傛灉浣犱嬌鐢ㄧ嚎紼嬩笓鐢ㄩ挬瀛愮殑DLL鏄犲皠鏈哄埗錛屽茍涓嶆埅鑾鋒秷鎭傝冭檻浣跨敤濡備笅浠g爜錛?br> <pre>BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { if( ul_reason_for_call == DLL_PROCESS_ATTACH ) { // Increase reference count via LoadLibrary char lib_name[MAX_PATH]; ::GetModuleFileName( hModule, lib_name, MAX_PATH ); ::LoadLibrary( lib_name ); // Safely remove hook ::UnhookWindowsHookEx( g_hHook ); } return TRUE; } </pre> 銆銆閭d箞浼?xì)鍙戠敓浠涔堝憿錛熼鍏堟垜浠氳繃Windows 閽╁瓙灝咲LL鏄犲皠鍒拌繙紼嬭繘紼嬨傜劧鍚庯紝鍦―LL琚疄闄呮槧灝勪箣鍚庯紝鎴戜滑瑙e紑閽╁瓙銆傞氬父褰撶涓涓秷鎭埌杈鵑挬瀛愪綔鐢ㄧ嚎紼嬫椂錛孌LL姝ゆ椂涔熶笉浼?xì)琚槧灏勩傝繖閲岀殑澶勭悊鎶宸ф槸璋冪敤LoadLibrary閫氳繃澧炲姞 DLLs鐨勫紩鐢ㄨ鏁版潵闃叉鏄犲皠涓嶆垚鍔熴?br>銆銆鐜板湪鍓╀笅鐨勯棶棰樻槸濡備綍鍗歌澆DLL錛孶nhookWindowsHookEx 鏄笉浼?xì)鍋殬q欎釜浜嬫儏鐨勶紝鍥犱負(fù)閽╁瓙宸茬粡涓嶄綔鐢ㄤ簬綰跨▼浜?jiǎn)銆備綘鍙互鍍忎笅闈㈣繖鏍峰仛錛?br><br> <ul> <li>灝卞湪浣犳兂瑕佽В闄LL鏄犲皠鍓嶏紝瀹夎鍙︿竴涓挬瀛愶紱 <li>鍙戦佷竴涓?#8220;鐗規(guī)畩”娑堟伅鍒拌繙紼嬬嚎紼嬶紱 <li>鍦ㄩ挬瀛愯繃紼嬩腑鎴幏榪欎釜娑堟伅錛屽搷搴旇娑堟伅鏃惰皟鐢?FreeLibrary 鍜?UnhookWindowsHookEx錛?/li> </ul> <p> </p> <p>銆銆鐩墠鍙嬌鐢ㄤ簡(jiǎn)閽╁瓙鏉ヤ粠澶勭悊榪滅▼榪涚▼涓璂LL鐨勬槧灝勫拰瑙i櫎鏄犲皠銆傚湪姝?#8220;浣滅敤浜庣嚎紼嬬殑”閽╁瓙瀵規(guī)ц兘娌℃湁褰卞搷銆?br>涓嬮潰鎴戜滑灝嗚璁哄彟澶栦竴縐嶆柟娉曪紝榪欎釜鏂規(guī)硶涓?LoadLibrary 鎶鏈殑涓嶅悓涔嬪鏄疍LL鐨勬槧灝勬満鍒朵笉浼?xì)骞查鐩爣杩浗E嬨傜浉瀵筁oadLibrary 鎶鏈紝榪欓儴鍒嗘弿榪扮殑鏂規(guī)硶閫傜敤浜?WinNT鍜學(xué)in9x銆?br>銆銆浣嗘槸錛屼粈涔堟椂鍊欎嬌鐢ㄨ繖涓妧宸у憿錛熺瓟妗堟槸褰揇LL蹇呴』鍦ㄨ繙紼嬭繘紼嬩腑椹葷暀杈冮暱鏃墮棿錛堝嵆濡傛灉浣犲瓙綾誨寲鏌愪釜灞炰簬鍙﹀涓涓繘紼嬬殑鎺т歡鏃訛級(jí)浠ュ強(qiáng)浣犳兂灝藉彲鑳藉皯鐨勫共娑夌洰鏍囪繘紼嬫椂銆傛垜鍦?HookSpy 涓病鏈変嬌鐢ㄥ畠錛屽洜涓烘敞鍏LL 鐨勬椂闂村茍涓嶉暱鈥斺旀敞鍏ユ椂闂村彧瑕佽凍澶熷緱鍒板瘑鐮佸嵆鍙傛垜鎻愪緵浜?jiǎn)鍙﹀涓涓緥瀛愮▼搴忊斺擧ookInjEx鈥斺旀潵紺鴻寖銆侶ookInjEx 灝咲LL鏄犲皠鍒拌祫婧愮鐞嗗櫒“explorer.exe”錛屽茍浠庝腑/瑙i櫎褰卞皠錛屽畠瀛愮被鍖?#8220;寮濮?#8221;鎸夐挳錛屽茍浜ゆ崲榧犳爣宸﹀彸閿崟鍑?#8220;寮濮?#8221;鎸夐挳鐨勫姛鑳姐?</p> </li> </ol> <p>HookSpy 鍜?HookInjEx 鐨勬簮浠g爜閮藉彲浠ヤ粠鏈枃鐨?a ><u><font color=#0000ff>涓嬭澆婧愪唬鐮?/font></u></a>涓幏寰椼? <p>絎簩閮ㄥ垎錛?a name=CreateRemoteThread_鍜宊LoadLibrary_鎶鏈?CreateRemoteThread 鍜?LoadLibrary 鎶鏈?/a> <p>鑼冧緥紼嬪簭鈥斺擫ibSpy <p>閫氬父錛屼換浣曡繘紼嬮兘鍙互閫氳繃 LoadLibrary API 鍔ㄦ佸姞杞紻LL銆備絾鏄紝濡備綍寮哄埗涓涓閮ㄨ繘紼嬭皟鐢ㄨ繖涓嚱鏁板憿錛熺瓟妗堟槸錛欳reateRemoteThread銆?br>棣栧厛錛岃鎴戜滑鐪嬩竴涓?LoadLibrary 鍜孎reeLibrary API 鐨勫0鏄庯細(xì)</p> <pre>HINSTANCE LoadLibrary( LPCTSTR lpLibFileName // 搴撴ā鍧楁枃浠跺悕鐨勫湴鍧 ); BOOL FreeLibrary( HMODULE hLibModule // 瑕佸姞杞界殑搴撴ā鍧楃殑鍙ユ焺 );</pre> <p>鐜板湪灝嗗畠浠笌浼犻掑埌 CreateRemoteThread 鐨勭嚎紼嬩緥紼嬧斺擳hreadProc 鐨勫0鏄庤繘琛屾瘮杈冦?/p> <pre>DWORD WINAPI ThreadProc( LPVOID lpParameter // 綰跨▼鏁版嵁 );</pre> <p>浣犲彲浠ョ湅鍒幫紝鎵鏈夊嚱鏁伴兘浣跨敤鐩稿悓鐨勮皟鐢ㄨ鑼冨茍閮芥帴鍙?32浣嶅弬鏁幫紝榪斿洖鍊肩殑澶у皬閮界浉鍚屻備篃灝辨槸璇達(dá)紝鎴戜滑鍙互浼犻掍竴涓寚閽堝埌LoadLibrary/FreeLibrary 浣滀負(fù)鍒?CreateRemoteThread 鐨勭嚎紼嬩緥紼嬨備絾榪欓噷鏈変袱涓棶棰橈紝璇風(fēng)湅涓嬮潰瀵笴reateRemoteThread 鐨勬弿榪幫細(xì)</p> <ol> <li>CreateRemoteThread 鐨?lpStartAddress 鍙傛暟蹇呴』琛ㄧず榪滅▼榪涚▼涓嚎紼嬩緥紼嬬殑寮濮嬪湴鍧銆? <li>濡傛灉浼犻掑埌 ThreadFunc 鐨勫弬鏁發(fā)pParameter鈥斺旇瑙i噴涓哄父瑙勭殑 32浣嶅鹼紙F(tuán)reeLibrary灝嗗畠瑙i噴涓轟竴涓?HMODULE錛夛紝涓鍒嘜K銆備絾鏄紝濡傛灉 lpParameter 琚В閲婁負(fù)涓涓寚閽堬紙LoadLibraryA灝嗗畠瑙i噴涓轟竴涓覆鎸囬拡錛夈傚畠蹇呴』鎸囧悜榪滅▼榪涚▼鐨勬煇浜涙暟鎹?</li> </ol> <p>銆銆絎竴涓棶棰樺疄闄呬笂鏄敱瀹冭嚜宸辮В鍐崇殑銆侺oadLibrary 鍜?FreeLibray 涓や釜鍑芥暟閮藉湪 kernel32.dll 涓傚洜涓哄繀欏諱繚璇乲ernel32瀛樺湪騫朵笖鍦ㄦ瘡涓?#8220;甯歌”榪涚▼涓殑鍔犺澆鍦板潃瑕佺浉鍚岋紝LoadLibrary/FreeLibray 鐨勫湴鍧鍦ㄦ瘡涓繘紼嬩腑鐨勫湴鍧瑕佺浉鍚岋紝榪欏氨淇濊瘉浜?jiǎn)鏈夋晥鐨勬寚閽堣浼犻掑埌榪滅▼榪涚▼銆?br>銆銆絎簩涓棶棰樹篃寰堝鏄撹В鍐熾傚彧瑕侀氳繃 WriteProcessMemory 灝?DLL 妯″潡鍚嶏紙LoadLibrary闇瑕佺殑DLL妯″潡鍚嶏級(jí)鎷瘋礉鍒拌繙紼嬭繘紼嬪嵆鍙?/p> <p>鎵浠ワ紝涓轟簡(jiǎn)浣跨敤CreateRemoteThread 鍜?LoadLibrary 鎶鏈紝闇瑕佹寜鐓т笅鍒楁楠ゆ潵鍋氾細(xì)</p> <ol> <li>鑾峰彇榪滅▼榪涚▼錛圤penProcess錛夌殑 HANDLE錛? <li>涓鴻繙紼嬭繘紼嬩腑鐨?DLL鍚嶅垎閰嶅唴瀛橈紙VirtualAllocEx錛夛紱 <li>灝?DLL 鍚嶏紝鍖呭惈鍏ㄨ礬寰勫悕錛屽啓鍏ュ垎閰嶇殑鍐呭瓨錛圵riteProcessMemory錛夛紱 <li>鐢?CreateRemoteThread 鍜?LoadLibrary. 灝嗕綘鐨凞LL鏄犲皠鍒拌繙紼嬭繘紼嬶紱 <li>絳夊緟鐩村埌綰跨▼緇堟錛圵aitForSingleObject錛夛紝涔熷氨鏄鐩村埌 LoadLibrary 璋冪敤榪斿洖銆傚彟涓縐嶆柟娉曟槸錛屼竴鏃?DllMain錛堢敤DLL_PROCESS_ATTACH璋冪敤錛夎繑鍥烇紝綰跨▼灝變細(xì)緇堟錛? <li>鑾峰彇榪滅▼綰跨▼鐨勯鍑轟唬鐮侊紙GetExitCodeThread錛夈傛敞鎰忚繖鏄竴涓?LoadLibrary 榪斿洖鐨勫鹼紝鍥犳鏄墍鏄犲皠 DLL 鐨勫熀鍦板潃錛圚MODULE錛夈?br>鍦ㄧ浜屾涓噴鏀懼垎閰嶇殑鍦板潃錛圴irtualFreeEx錛夛紱 <li>鐢?CreateRemoteThread 鍜?FreeLibrary浠庤繙紼嬭繘紼嬩腑鍗歌澆 DLL銆備紶閫掑湪絎叚姝ヨ幏鍙栫殑 HMODULE 鍙ユ焺鍒?FreeLibrary錛堥氳繃 CreateRemoteThread 鐨刲pParameter鍙傛暟錛夛紱 <li>娉ㄦ剰錛氬鏋滀綘娉ㄥ叆鐨?DLL 浜х敓浠諱綍鏂扮殑綰跨▼錛屼竴瀹氳鍦ㄥ嵏杞紻LL 涔嬪墠灝嗗畠浠兘緇堟鎺夛紱 <li>絳夊緟鐩村埌綰跨▼緇堟錛圵aitForSingleObject錛夛紱 </li> </ol> <p>銆銆姝ゅ錛屽鐞嗗畬鎴愬悗涓嶈蹇樹簡(jiǎn)鍏抽棴鎵鏈夊彞鏌勶紝鍖呮嫭鍦ㄧ鍥涙鍜岀鍏鍒涘緩鐨勪袱涓嚎紼嬩互鍙?qiáng)鍦ńW竴姝ヨ幏鍙栫殑榪滅▼綰跨▼鍙ユ焺銆傜幇鍦ㄨ鎴戜滑鐪嬩竴涓?LibSpy 鐨勯儴鍒嗕唬鐮侊紝涓轟簡(jiǎn)綆鍗曡搗瑙侊紝涓婅堪姝ラ鐨勫疄鐜扮粏鑺備腑鐨勯敊璇鐞嗕互鍙?UNICODE 鏀寔閮ㄥ垎琚暐鎺夈?</p> <pre>HANDLE hThread; char szLibPath[_MAX_PATH]; // “LibSpy.dll”妯″潡鐨勫悕縐?(鍖呮嫭鍏ㄨ礬寰?; void* pLibRemote; // 榪滅▼榪涚▼涓殑鍦板潃錛宻zLibPath 灝嗚鎷瘋礉鍒版澶? DWORD hLibModule; // 瑕佸姞杞界殑妯″潡鐨勫熀鍦板潃錛圚MODULE錛? HMODULE hKernel32 = ::GetModuleHandle("Kernel32"); // 鍒濆鍖杝zLibPath //... // 1. 鍦ㄨ繙紼嬭繘紼嬩腑涓簊zLibPath 鍒嗛厤鍐呭瓨 // 2. 灝唖zLibPath 鍐欏叆鍒嗛厤鐨勫唴瀛? pLibRemote = ::VirtualAllocEx( hProcess, NULL, sizeof(szLibPath), MEM_COMMIT, PAGE_READWRITE ); ::WriteProcessMemory( hProcess, pLibRemote, (void*)szLibPath, sizeof(szLibPath), NULL ); // 灝?LibSpy.dll" 鍔犺澆鍒拌繙紼嬭繘紼嬶紙浣跨敤CreateRemoteThread 鍜?LoadLibrary錛? hThread = ::CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE) ::GetProcAddress( hKernel32, "LoadLibraryA" ), pLibRemote, 0, NULL ); ::WaitForSingleObject( hThread, INFINITE ); // 鑾峰彇鎵鍔犺澆鐨勬ā鍧楃殑鍙ユ焺 ::GetExitCodeThread( hThread, &hLibModule ); // 娓呴櫎 ::CloseHandle( hThread ); ::VirtualFreeEx( hProcess, pLibRemote, sizeof(szLibPath), MEM_RELEASE ); </pre> 銆 鍋囪鎴戜滑瀹為檯鎯寵娉ㄥ叆鐨勪唬鐮佲斺擲endMessage 鈥斺旇鏀懼湪DllMain (DLL_PROCESS_ATTACH)涓紝鐜板湪瀹冨凡緇忚鎵ц銆傞偅涔堢幇鍦ㄥ簲璇ヤ粠鐩爣榪涚▼涓皢DLL 鍗歌澆錛? <pre>// 浠庣洰鏍囪繘紼嬩腑鍗歌澆"LibSpy.dll" (浣跨敤 CreateRemoteThread 鍜?FreeLibrary) hThread = ::CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE) ::GetProcAddress( hKernel32, "FreeLibrary" ), (void*)hLibModule, 0, NULL ); ::WaitForSingleObject( hThread, INFINITE ); // 娓呴櫎 ::CloseHandle( hThread ); </pre> <em><a name=榪涚▼闂撮氫俊>榪涚▼闂撮氫俊</a></em><br><br>銆銆鍒扮洰鍓嶄負(fù)姝紝鎴戜滑鍙璁轟簡(jiǎn)鍏充簬濡備綍灝咲LL 娉ㄥ叆鍒拌繙紼嬭繘紼嬬殑鍐呭錛屼絾鏄紝鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝娉ㄥ叆鐨?DLL 閮介渶瑕佷笌鍘熷簲鐢ㄧ▼搴忚繘琛屾煇縐嶆柟寮忕殑閫氫俊錛堝洖鎯充竴涓嬶紝鎴戜滑鐨凞LL鏄鏄犲皠鍒版煇涓繙紼嬭繘紼嬬殑鍦板潃絀洪棿閲屼簡(jiǎn)錛屼笉鏄湪鏈湴搴旂敤紼嬪簭鐨勫湴鍧絀洪棿涓級(jí)銆傛瘮濡傜瀵嗕睛嫻嬬▼搴忥紝DLL蹇呴』瑕佺煡閬撳疄闄呭寘鍚瘑鐮佺殑鎺т歡鍙ユ焺錛屾樉鐒?dòng)灱尵~栬瘧鏃舵棤娉曞皢榪欎釜鍊艱繘琛岀‖緙栫爜銆傚悓鏍鳳紝涓鏃LL鑾峰緱浜?jiǎn)绉樺瘑锛屽畠蹇厵逭d皢瀹冨彂閫佸洖鍘熷簲鐢ㄧ▼搴忥紝浠ヤ究鑳芥紜樉紺哄嚭鏉ャ?br>銆銆騫歌繍鐨勬槸錛屾湁璁稿鏂規(guī)硶澶勭悊榪欎釜闂錛屾枃浠舵槧灝勶紝W(xué)M_COPYDATA錛屽壀璐存澘浠ュ強(qiáng)寰堢畝鍗曠殑 #pragma data_seg 鍏變韓鏁版嵁孌電瓑錛屾湰鏂囨垜涓嶆墦綆椾嬌鐢ㄨ繖浜涙妧鏈紝鍥犱負(fù)MSDN錛?#8220;榪涚▼闂撮氫俊”閮ㄥ垎錛変互鍙?qiáng)鍏跺畠娓犻亾鍙互鎵惧埌寰堝鏂囨。鍙傝冦備笉榪囨垜鍦?LibSpy渚嬪瓙涓繕鏄嬌鐢ㄤ簡(jiǎn) #pragma data_seg銆傜粏鑺傝鍙傝?LibSpy 婧愪唬鐮併? <p>絎笁閮ㄥ垎錛?a name=CreateRemoteThread_鍜宊WriteProcessMemory_鎶鏈?CreateRemoteThread 鍜?WriteProcessMemory 鎶鏈?/a></p> <p>鑼冧緥紼嬪簭鈥斺擶inSpy </p> <p>銆銆鍙﹀涓涓皢浠g爜鎷瘋礉鍒板彟涓涓繘紼嬪湴鍧絀洪棿騫跺湪璇ヨ繘紼嬩笂涓嬫枃涓墽琛岀殑鏂規(guī)硶鏄嬌鐢ㄨ繙紼嬬嚎紼嬪拰 WriteProcessMemory API銆傝繖縐嶆柟娉曚笉鐢ㄧ紪鍐欏崟鐙殑DLL錛岃屾槸鐢?WriteProcessMemory 鐩存帴灝嗕唬鐮佹嫹璐濆埌榪滅▼榪涚▼鈥斺旂劧鍚庣敤 CreateRemoteThread 鍚姩瀹冩墽琛屻傚厛鏉ョ湅鐪?CreateRemoteThread 鐨勫0鏄庯細(xì) </p> <pre>HANDLE CreateRemoteThread( HANDLE hProcess, // 浼犲叆鍒涘緩鏂扮嚎紼嬬殑榪涚▼鍙ユ焺 LPSECURITY_ATTRIBUTES lpThreadAttributes, // 瀹夊叏灞炴ф寚閽? DWORD dwStackSize, // 瀛楄妭涓哄崟浣嶇殑鍒濆綰跨▼鍫嗘爤 LPTHREAD_START_ROUTINE lpStartAddress, // 鎸囧悜綰跨▼鍑芥暟鐨勬寚閽? LPVOID lpParameter, // 鏂扮嚎紼嬩嬌鐢ㄧ殑鍙傛暟 DWORD dwCreationFlags, // 鍒涘緩鏍囧織 LPDWORD lpThreadId // 鎸囧悜榪斿洖鐨勭嚎紼婭D ); </pre> 濡傛灉浣犳瘮杈冨畠涓?CreateThread錛圡SDN錛夌殑澹版槑錛屼綘浼?xì)娉ㄦ剰鍒板涓嬬殑宸埆锛?xì) <ul> <li>鍦?CreateRemoteThread涓紝hProcess鏄澶栫殑涓涓弬鏁幫紝涓涓繘紼嬪彞鏌勶紝鏂扮嚎紼嬪氨鏄湪榪欎釜榪涚▼涓垱寤虹殑錛? <li>鍦?CreateRemoteThread涓紝lpStartAddress 琛ㄧず鐨勬槸鍦ㄨ繙紼嬭繘紼嬪湴鍧絀洪棿涓殑綰跨▼璧峰鍦板潃銆傜嚎紼嬪嚱鏁板繀欏昏瀛樺湪浜庤繙紼嬭繘紼嬩腑錛屾墍浠ユ垜浠笉鑳界畝鍗曞湴浼犻掍竴涓寚閽堝埌鏈湴鐨?ThreadFunc銆傚繀欏誨緱鍏堟嫹璐濅唬鐮佸埌榪滅▼榪涚▼錛? <li>鍚屾牱錛宭pParameter 鎸囧悜鐨勬暟鎹篃蹇呴』瑕佸瓨鍦ㄤ簬榪滅▼榪涚▼錛屾墍浠ヤ篃寰楀皢瀹冩嫹璐濆埌閭c?</li> </ul> <p>緇間笂鎵榪幫紝鎴戜滑寰楁寜鐓у涓嬬殑姝ラ鏉ュ仛錛?/p> <ol> <li>鑾峰彇涓涓繙紼嬭繘紼嬬殑HANDLE (OpenProces) 錛? <li>鍦ㄨ繙紼嬭繘紼嬪湴鍧絀洪棿涓負(fù)娉ㄥ叆鐨勬暟鎹垎閰嶅唴瀛橈紙VirtualAllocEx錛夛紱 <li>灝嗗垵濮嬬殑 INDATA 鏁版嵁緇撴瀯鐨勪竴涓嫹璐濆啓鍏ュ垎閰嶇殑鍐呭瓨涓紙WriteProcessMemory錛夛紱 <li>鍦ㄨ繙紼嬭繘紼嬪湴鍧絀洪棿涓負(fù)娉ㄥ叆鐨勪唬鐮佸垎閰嶅唴瀛橈紱 <li>灝?ThreadFunc 鐨勪竴涓嫹璐濆啓鍏ュ垎閰嶇殑鍐呭瓨錛? <li>鐢?CreateRemoteThread鍚姩榪滅▼鐨?ThreadFunc 鎷瘋礉錛? <li>絳夊緟榪滅▼綰跨▼緇堟錛圵aitForSingleObject錛夛紱 <li>鑾峰彇榪滅▼鏉ヨ嚜榪滅▼榪涚▼鐨勭粨鏋滐紙ReadProcessMemory 鎴?GetExitCodeThread錛夛紱 <li>閲婃斁鍦ㄧ浜屾鍜岀鍥涙涓垎閰嶇殑鍐呭瓨錛圴irtualFreeEx錛夛紱 <li>鍏抽棴鍦ㄧ鍏鍜岀涓姝ヨ幏鍙栫殑鍙ユ焺錛圕loseHandle錛夛紱 </li> </ol> <p>ThreadFunc 蹇呴』瑕侀伒寰殑鍘熷垯錛?/p> <ol> <li>闄や簡(jiǎn)kernel32.dll 鍜寀ser32.dll 涓殑鍑芥暟涔嬪錛孴hreadFunc 涓嶈璋冪敤浠諱綍鍏跺畠鍑芥暟錛屽彧鏈?kernel32.dll 鍜寀ser32.dll琚繚璇佸湪鏈湴鍜岀洰鏍囪繘紼嬩腑鐨勫姞杞藉湴鍧鐩稿悓錛堟敞鎰忥紝user32.dll騫朵笉鏄鏄犲皠鍒版瘡涓?Win32 鐨勮繘紼嬶級(jí)銆傚鏋滀綘闇瑕佹潵鑷叾瀹冨簱涓殑鍑芥暟錛屽皢LoadLibrary 鍜?GetProcAddress 鐨勫湴鍧浼犵粰娉ㄥ叆鐨勪唬鐮侊紝鐒跺悗鏀炬墜璁╁畠鑷繁鍘誨仛銆傚鏋滄槧灝勫埌鐩爣榪涚▼涓殑DLL鏈夊啿紿侊紝浣犱篃鍙互鐢?GetModuleHandle 鏉ヤ唬鏇?LoadLibrary銆?br>銆銆鍚屾牱錛屽鏋滀綘鎯沖湪 ThreadFunc 涓皟鐢ㄨ嚜宸辯殑瀛愪緥紼嬶紝瑕佸崟鐙妸姣忎釜渚嬬▼鐨勪唬鐮佹嫹璐濆埌榪滅▼榪涚▼騫剁敤 INJDATA涓?ThreadFunc 鎻愪緵浠g爜鐨勫湴鍧銆? <li>涓嶈浣跨敤闈?rùn)鎬佸瓧絎︿覆錛岃岃鐢?INJDATA 鏉ヤ紶閫掓墍鏈夊瓧絎︿覆銆備箣鎵浠ヨ榪欐牱錛屾槸鍥犱負(fù)緙栬瘧鍣ㄥ皢闈?rùn)鎬佸瓧絎︿覆鏀懼湪鍙墽琛岀▼搴忕殑“鏁版嵁孌?#8221;涓紝鍙槸寮曠敤錛堟寚閽堬級(jí)鏄繚鐣欏湪浠g爜涓殑銆傞偅涔堬紝榪滅▼榪涚▼涓璗hreadFunc 鐨勬嫹璐濇寚鍚戠殑鍐呭鍦ㄨ繙紼嬭繘紼嬬殑鍦板潃絀洪棿涓槸涓嶅瓨鍦ㄧ殑銆? <li>鍘繪帀 /GZ 緙栬瘧鍣ㄥ紑鍏籌紝瀹冨湪璋冭瘯鐗堟湰涓槸榛樿璁劇疆鐨勩? <li>灝?ThreadFunc 鍜?AfterThreadFunc 澹版槑涓洪潤(rùn)鎬佺被鍨嬶紝鎴栬呬笉鍚敤澧為噺閾炬帴銆? <li>ThreadFunc 涓殑灞閮ㄥ彉閲忎竴瀹氫笉鑳借秴榪囦竴欏碉紙涔熷氨鏄?4KB錛夈?br>娉ㄦ剰鍦ㄨ皟璇曠増鏈腑4KB鐨勭┖闂存湁澶х害10涓瓧鑺傛槸鐢ㄤ簬鍐呴儴鍙橀噺鐨勩? <li>濡傛灉浣犳湁涓涓紑鍏寵鍙ュ潡澶т簬3涓猚ase 璇彞錛屽皢瀹冧滑鍍忎笅闈㈣繖鏍鋒媶鍒嗗紑錛? <pre>switch( expression ) { case constant1: statement1; goto END; case constant2: statement2; goto END; case constant3: statement2; goto END; } switch( expression ) { case constant4: statement4; goto END; case constant5: statement5; goto END; case constant6: statement6; goto END; } END: </pre> 鎴栬呭皢瀹冧滑淇敼鎴愪竴涓?if-else if 緇撴瀯璇彞錛堝弬瑙侀檮褰旹錛夈?</li> </ol> <p>銆銆濡傛灉浣犳病鏈夋寜鐓ц繖浜涜鍒欐潵鍋氾紝鐩爣榪涚▼寰堝彲鑳戒細(xì)宕╂簝銆傛墍浠ュ姟蹇呯墷璁般傚湪鐩爣榪涚▼涓笉瑕佸亣璁句換浣曚簨鎯呴兘浼?xì)鍍忓湪鏈湴杩浗E嬩腑閭f牱 錛堝弬瑙侀檮褰旻錛夈? <p>GetWindowTextRemote(A/W) <p>瑕佹兂浠?#8220;榪滅▼”緙栬緫妗嗚幏寰楀瘑鐮侊紝浣犻渶瑕佸仛鐨勫氨鏄皢鎵鏈夊姛鑳介兘灝佽鍦℅etWindowTextRemot(A/W):涓?/p> <pre>int GetWindowTextRemoteA( HANDLE hProcess, HWND hWnd, LPSTR lpString ); int GetWindowTextRemoteW( HANDLE hProcess, HWND hWnd, LPWSTR lpString ); 鍙傛暟璇存槑錛? hProcess錛氱紪杈戞鎺т歡鎵灞炵殑榪涚▼鍙ユ焺錛? hWnd錛氬寘鍚瘑鐮佺殑緙栬緫妗嗘帶浠跺彞鏌勶紱 lpString錛氭帴鏀舵枃鏈殑緙撳啿鎸囬拡錛? 榪斿洖鍊鹼細(xì)榪斿洖鍊兼槸鎷瘋礉鐨勫瓧絎︽暟錛?/pre> <p>銆銆涓嬮潰璁╂垜浠湅鐪嬪畠鐨勯儴鍒嗕唬鐮佲斺斿挨鍏舵槸娉ㄥ叆鏁版嵁鐨勪唬鐮佲斺斾互渚挎槑鐧?GetWindowTextRemote 鐨勫伐浣滃師鐞嗐傛澶勪負(fù)綆鍗曡搗瑙侊紝鐣ユ帀浜?UNICODE 鏀寔閮ㄥ垎銆?/p> <pre>INJDATA typedef LRESULT (WINAPI *SENDMESSAGE)(HWND,UINT,WPARAM,LPARAM); typedef struct { HWND hwnd; // 緙栬緫妗嗗彞鏌? SENDMESSAGE fnSendMessage; // 鎸囧悜user32.dll 涓?SendMessageA 鐨勬寚閽? char psText[128]; // 鎺ユ敹瀵嗙爜鐨勭紦鍐? } INJDATA;</pre> <p>銆銆INJDATA 鏄竴涓娉ㄥ叆鍒拌繙紼嬭繘紼嬬殑鏁版嵁緇撴瀯銆備絾鍦ㄦ敞鍏ヤ箣鍓嶏紝緇撴瀯涓寚鍚?SendMessageA 鐨勬寚閽堟槸鍦ㄦ湰鍦板簲鐢ㄧ▼搴忎腑鍒濆鍖栫殑銆傚洜涓哄浜庢瘡涓嬌鐢╱ser32.dll鐨勮繘紼嬫潵璇達(dá)紝user32.dll鎬繪槸琚槧灝勫埌鐩稿悓鐨勫湴鍧錛屽洜姝わ紝SendMessageA 鐨勫湴鍧涔熻偗瀹氭槸鐩稿悓鐨勩傝繖灝變繚璇佷簡(jiǎn)琚紶閫掑埌榪滅▼榪涚▼鐨勬槸涓涓湁鏁堢殑鎸囬拡銆?br><br>ThreadFunc鍑芥暟</p> <pre>static DWORD WINAPI ThreadFunc (INJDATA *pData) { pData->fnSendMessage( pData->hwnd, WM_GETTEXT, // Get password sizeof(pData->psText), (LPARAM)pData->psText ); return 0; } // 璇ュ嚱鏁板湪ThreadFunc涔嬪悗鏍囪鍐呭瓨鍦板潃 // int cbCodeSize = (PBYTE) AfterThreadFunc - (PBYTE) ThreadFunc. static void AfterThreadFunc (void) { } </pre> <p>ThradFunc 鏄榪滅▼綰跨▼鎵ц鐨勪唬鐮併?/p> <ul> <li>娉ㄩ噴錛氭敞鎰廇fterThreadFunc 鏄浣曡綆?ThreadFunc 澶у皬鐨勩傞氬父榪欐牱鍋氬茍涓嶆槸涓涓ソ鍔炴硶錛屽洜涓洪摼鎺ュ櫒鍙互闅忔剰鏇存敼鍑芥暟鐨勯『搴忥紙涔熷氨鏄ThreadFunc鍙兘琚斁鍦?AfterThreadFunc涔嬪悗錛夈傝繖涓鐐逛綘鍙互鍦ㄥ皬欏圭洰涓緢濂藉湴淇濊瘉鍑芥暟鐨勯『搴忔槸棰勫厛璁炬兂濂界殑錛屾瘮濡?WinSpy 紼嬪簭銆傚湪蹇呰鐨勬儏鍐典笅錛屼綘榪樺彲浠ヤ嬌鐢?/ORDER 閾炬帴鍣ㄩ夐」鏉ヨВ鍐沖嚱鏁伴摼鎺ラ『搴忛棶棰樸傛垨鑰呯敤鍙嶆眹緙栫‘瀹?ThreadFunc 鍑芥暟鐨勫ぇ灝忋?</li> </ul> <a name=濡備綍浣跨敤璇ユ妧鏈瓙綾誨寲榪滅▼鎺т歡>濡備綍浣跨敤璇ユ妧鏈瓙綾誨寲榪滅▼鎺т歡</a> <p>鑼冧緥紼嬪簭鈥斺擨njectEx<br><br>涓嬮潰鎴戜滑灝嗚璁轟竴浜涙洿澶嶆潅鐨勫唴瀹癸紝濡備綍瀛愮被鍖栧睘浜庡彟涓涓繘紼嬬殑鎺т歡銆?br><br>棣栧厛錛屼綘寰楁嫹璐濅袱涓嚱鏁板埌榪滅▼榪涚▼鏉ュ畬鎴愭浠誨姟</p> <ol> <li>ThreadFunc瀹為檯涓婃槸閫氳繃 SetWindowLong瀛愮被鍖栬繙紼嬭繘紼嬩腑鐨勬帶浠訛紱 <li>NewProc鏄瓙綾誨寲鎺т歡鐨勬柊紿楀彛榪囩▼錛?</li> </ol> <p>銆銆榪欓噷涓昏鐨勯棶棰樻槸濡備綍灝嗘暟鎹紶鍒拌繙紼嬬獥鍙h繃紼?NewProc錛屽洜涓?NewProc 鏄竴涓洖璋冨嚱鏁幫紝瀹冨繀欏婚伒寰壒瀹氱殑瑙勮寖鍜屽師鍒欙紝鎴戜滑涓嶈兘綆鍗曞湴鍦ㄥ弬鏁頒腑浼犻?INJDATA鎸囬拡銆傚垢榪愮殑鏄垜鎵懼埌浜?jiǎn)鏈変袱涓栆?guī)硶鏉ヨВ鍐寵繖涓棶棰橈紝鍙笉榪囪鍊熷姪姹囩紪璇█錛屾墍浠ヤ笉瑕佸拷鐣ヤ簡(jiǎn)姹囩紪錛屽叧閿椂鍊欏畠鏄緢鏈夌敤鐨勶紒<br><br>鏂規(guī)硶涓錛?/p> <p>濡備笅鍥炬墍紺猴細(xì)</p> <p><img height=267 src="http://www.vckbase.com/document/journal/vckbase55/images/winspy2.gif" width=438 border=0></p> <p>銆銆鍦ㄨ繙紼嬭繘紼嬩腑錛孖NJDATA 琚斁鍦∟ewProc 涔嬪墠錛岃繖鏍?NewProc 鍦ㄧ紪璇戞椂渚跨煡閬?INJDATA 鍦ㄨ繙紼嬭繘紼嬪湴鍧絀洪棿涓殑鍐呭瓨浣嶇疆銆傛洿紜垏鍦拌錛屽畠鐭ラ亾鐩稿浜庡叾鑷韓浣嶇疆鐨?INJDATA 鐨勫湴鍧錛屾垜浠渶瑕佹墍鏈夎繖浜涗俊鎭備笅闈㈡槸 NewProc 鐨勪唬鐮侊細(xì) </p> <pre>static LRESULT CALLBACK NewProc( HWND hwnd, // 紿楀彛鍙ユ焺 UINT uMsg, // 娑堟伅鏍囩ず絎? WPARAM wParam, // 絎竴涓秷鎭弬鏁? LPARAM lParam ) // 絎簩涓秷鎭弬鏁? { INJDATA* pData = (INJDATA*) NewProc; // pData 鎸囧悜 NewProc pData--; // 鐜板湪pData 鎸囧悜INJDATA; // 鍥炴兂涓涓婭NJDATA 琚疆浜庤繙紼嬭繘紼婲ewProc涔嬪墠; //----------------------------- // 姝ゅ鏄瓙綾誨寲浠g爜 // ........ //----------------------------- // 璋冪敤鍘熺獥鍙h繃紼? // fnOldProc (鐢盨etWindowLong 榪斿洖) 琚紙榪滅▼錛塗hreadFunc鍒濆鍖? // 騫惰淇濆瓨鍦紙榪滅▼錛塈NJDATA;涓? return pData->fnCallWindowProc( pData->fnOldProc, hwnd,uMsg,wParam,lParam ); } </pre> 浣嗚繖閲岃繕鏈変竴涓棶棰橈紝瑙佺涓琛屼唬鐮侊細(xì) <pre>INJDATA* pData = (INJDATA*) NewProc;</pre> <p>銆銆榪欑鏂瑰紡 pData寰楀埌鐨勬槸紜紪鐮佸鹼紙鍦ㄦ垜浠殑榪涚▼涓槸鍘?NewProc 鐨勫唴瀛樺湴鍧錛夈傝繖涓嶆槸鎴戜滑鍗佸垎鎯寵鐨勩傚湪榪滅▼榪涚▼涓紝NewProc “褰撳墠”鎷瘋礉鐨勫唴瀛樺湴鍧涓庡畠琚Щ鍒扮殑瀹為檯浣嶇疆鏄棤鍏崇殑錛屾崲鍙ヨ瘽璇達(dá)紝鎴戜滑浼?xì)闇瑕佹煇縐嶇被鍨嬬殑“this 鎸囬拡”銆?br>铏界劧鐢?C/C++ 鏃犳硶瑙e喅榪欎釜闂錛屼絾鍊熷姪鍐呰仈姹囩紪鍙互瑙e喅錛屼笅闈㈡槸瀵?NewProc鐨勪慨鏀癸細(xì)<br></p> <pre>static LRESULT CALLBACK NewProc( HWND hwnd, // 紿楀彛鍙ユ焺 UINT uMsg, // 娑堟伅鏍囩ず絎? WPARAM wParam, // 絎竴涓秷鎭弬鏁? LPARAM lParam ) // 絎簩涓秷鎭弬鏁? { // 璁$畻INJDATA 緇撴瀯鐨勪綅緗? // 鍦ㄨ繙紼嬭繘紼嬩腑璁頒綇榪欎釜INJDATA // 琚斁鍦∟ewProc涔嬪墠 INJDATA* pData; _asm { call dummy dummy: pop ecx // <- ECX 鍖呭惈褰撳墠鐨凟IP sub ecx, 9 // <- ECX 鍖呭惈NewProc鐨勫湴鍧 mov pData, ecx } pData--; //----------------------------- // 姝ゅ鏄瓙綾誨寲浠g爜 // ........ //----------------------------- // 璋冪敤鍘熸潵鐨勭獥鍙h繃紼? return pData->fnCallWindowProc( pData->fnOldProc, hwnd,uMsg,wParam,lParam ); } </pre> 銆銆閭d箞錛屾帴涓嬫潵璇ユ庝箞鍔炲憿錛熶簨瀹炰笂錛屾瘡涓繘紼嬮兘鏈変竴涓壒孌婄殑瀵勫瓨鍣紝瀹冩寚鍚戜笅涓鏉¤鎵ц鐨勬寚浠ょ殑鍐呭瓨浣嶇疆銆傚嵆鎵璋撶殑鎸囦護(hù)鎸囬拡錛屽湪32浣?Intel 鍜?AMD 澶勭悊鍣ㄤ笂琚〃紺轟負(fù) EIP銆傚洜涓?EIP鏄竴涓笓鐢ㄥ瘎瀛樺櫒錛屼綘鏃犳硶璞℃搷浣滀竴鑸父瑙勫瓨鍌ㄥ櫒錛堝錛欵AX錛孍BX絳夛級(jí)閭f牱閫氳繃緙栫▼瀛樺彇瀹冦備篃灝辨槸璇存病鏈夋搷浣滀唬鐮佹潵瀵誨潃 EIP錛屼互渚跨洿鎺ヨ鍙栨垨淇敼鍏跺唴瀹廣備絾鏄紝EIP 浠嶇劧榪樻槸鍙互閫氳繃闂存帴鏂規(guī)硶淇敼鐨勶紙騫朵笖闅忔椂鍙互淇敼錛夛紝閫氳繃JMP錛孋ALL鍜孯ET榪欎簺鎸囦護(hù)瀹炵幇銆備笅闈㈡垜浠氨閫氳繃渚嬪瓙鏉ヨВ閲婇氳繃 CALL/RET 瀛愪緥紼嬭皟鐢ㄦ満鍒跺湪32浣?Intel 鍜?AMD 澶勭悊鍣ㄤ笂鏄浣曞伐浣滅殑銆?<br>銆銆褰撲綘璋冪敤錛堥氳繃 CALL錛夋煇涓瓙渚嬬▼鏃訛紝瀛愪緥紼嬬殑鍦板潃琚姞杞藉埌 EIP錛屼絾鍗充究鏄湪 EIP鏉慨鏀逛箣鍓嶏紝鍏舵棫鐨勯偅涓艱鑷姩PUSH鍒板爢鏍堬紙琚敤浜庡悗闈綔涓烘寚浠ゆ寚閽堣繑鍥烇級(jí)銆傚湪瀛愪緥紼嬫墽琛屽畬鏃訛紝RET 鎸囦護(hù)鑷姩灝嗗爢鏍堥《POP鍒?EIP銆?br>銆銆鐜板湪浣犵煡閬撲簡(jiǎn)濡備綍閫氳繃 CALL 鍜?RET 瀹炵幇 EIP 鐨勪慨鏀癸紝浣嗗浣曡幏鍙栧叾褰撳墠鐨勫煎憿錛熶笅闈㈠氨鏉ヨВ鍐寵繖涓棶棰橈紝鍓嶉潰璁茶繃錛孋ALL PUSH EIP 鍒板爢鏍堬紝鎵浠ワ紝涓轟簡(jiǎn)鑾峰彇鍏跺綋鍓嶅鹼紝璋冪敤“鍝戝嚱鏁?#8221;錛岀劧鍚庡啀POP鍫嗘爤欏躲傝鎴戜滑鐢ㄧ紪璇戝悗鐨?NewProc 鏉ヨВ閲婅繖涓獚闂ㄣ? <pre>Address OpCode/Params Decoded instruction -------------------------------------------------- :00401000 55 push ebp ; entry point of ; NewProc :00401001 8BEC mov ebp, esp :00401003 51 push ecx :00401004 E800000000 call 00401009 ; *a* call dummy :00401009 59 pop ecx ; *b* :0040100A 83E909 sub ecx, 00000009 ; *c* :0040100D 894DFC mov [ebp-04], ecx ; mov pData, ECX :00401010 8B45FC mov eax, [ebp-04] :00401013 83E814 sub eax, 00000014 ; pData--; ..... ..... :0040102D 8BE5 mov esp, ebp :0040102F 5D pop ebp :00401030 C21000 ret 0010 </pre> <ul> <li>鍝戝嚱鏁拌皟鐢紱灝辨槸JUMP鍒頒笅涓涓寚浠ゅ茍PUSH EIP鍒板爢鏍堬紱 <li>鐒跺悗灝嗗爢鏍堥《POP鍒?ECX錛孍CX鍐嶄繚瀛楨IP錛涜繖涔熸槸 POP EIP鎸囦護(hù)鐨勭湡姝e湴鍧錛? <li>娉ㄦ剰 NewProc 鐨勫叆鍙g偣鍜?“POP ECX”涔嬮棿鐨?#8220;璺濈”鏄? 涓瓧鑺傦紱鍥犳涓轟簡(jiǎn)璁$畻 NewProc鐨勫湴鍧錛岃浠?ECX 鍑?銆?</li> </ul> <p>銆銆榪欐牱涓鏉ワ紝涓嶇 NewProc 琚Щ鍒頒粈涔堝湴鏂癸紝瀹冩昏兘璁$畻鍑哄叾鑷繁鐨勫湴鍧銆備絾鏄紝NewProc 鐨勫叆鍙g偣鍜?“POP ECX”涔嬮棿鐨勮窛紱誨彲鑳戒細(xì)闅忕潃浣犲緙栬瘧/閾炬帴閫夐」鐨勬敼鍙樿屽彉鍖栵紝鐢辨閫犳垚 RELEASE鍜孌EBUG鐗堟湰涔嬮棿涔熶細(xì)鏈夊樊鍒備絾鍏抽敭鏄綘浠嶇劧紜垏鍦扮煡閬撶紪璇戞椂鐨勫箋?/p> <ol> <li>棣栧厛錛岀紪璇戝嚱鏁? <li>鐢ㄥ弽姹囩紪紜畾姝g‘鐨勮窛紱? <li>鏈鍚庯紝鐢ㄦ紜殑璺濈鍊奸噸鏂扮紪璇?</li> </ol> <p>姝ゅ嵆涓?InjecEx 涓嬌鐢ㄧ殑瑙e喅鏂規(guī)錛岀被浼間簬 HookInjEx錛屼氦鎹㈤紶鏍囩偣鍑?#8220;寮濮?#8221;宸﹀彸閿椂鐨勫姛鑳姐?br><br>鏂規(guī)硶浜岋細(xì) <p>瀵逛簬鎴戜滑鐨勯棶棰橈紝鍦ㄨ繙紼嬭繘紼嬪湴鍧絀洪棿涓皢 INJDATA 鏀懼湪 NewProc 鍓嶉潰涓嶆槸鍞竴鐨勮В鍐沖姙娉曘傜湅涓嬮潰 NewProc鐨勫彉寮傜増鏈細(xì) </p> <pre>static LRESULT CALLBACK NewProc( HWND hwnd, // 紿楀彛鍙ユ焺 UINT uMsg, // 娑堟伅鏍囩ず絎? WPARAM wParam, // 絎竴涓秷鎭弬鏁? LPARAM lParam ) // 絎簩涓秷鎭弬鏁? { INJDATA* pData = 0xA0B0C0D0; // 铏氭瀯鍊? //----------------------------- // 瀛愮被鍖栦唬鐮? // ........ //----------------------------- // 璋冪敤鍘熸潵鐨勭獥鍙h繃紼? return pData->fnCallWindowProc( pData->fnOldProc, hwnd,uMsg,wParam,lParam ); } </pre> 銆銆姝ゅ 0xA0B0C0D0 鍙槸榪滅▼榪涚▼鍦板潃絀洪棿涓湡瀹烇紙緇濆錛塈NJDATA鍦板潃鐨勫崰浣嶇銆傚墠闈㈣榪囷紝浣犳棤娉曞湪緙栬瘧鏃剁煡閬撹鍦板潃銆備絾浣犲彲浠ュ湪璋冪敤 VirtualAllocEx 錛堜負(fù)INJDATA錛変箣鍚庡緱鍒?INJDATA 鍦ㄨ繙紼嬭繘紼嬩腑鐨勪綅緗傜紪璇戞垜浠殑 NewProc 鍚庯紝鍙互寰楀埌濡備笅緇撴灉錛? <pre> Address OpCode/Params Decoded instruction -------------------------------------------------- :00401000 55 push ebp :00401001 8BEC mov ebp, esp :00401003 C745FCD0C0B0A0 mov [ebp-04], A0B0C0D0 :0040100A ... .... :0040102D 8BE5 mov esp, ebp :0040102F 5D pop ebp :00401030 C21000 ret 0010 </pre> 鍥犳錛屽叾緙栬瘧鐨勪唬鐮侊紙鍗佸叚榪涘埗錛夊皢鏄細(xì) <pre>558BECC745FCD0C0B0A0......8BE55DC21000. </pre> 鐜板湪浣犲彲浠ヨ薄涓嬮潰榪欐牱緇х畫錛? <ol> <li>灝咺NJDATA錛孴hreadFunc鍜孨ewProc 鎷瘋礉鍒扮洰鏍囪繘紼嬶紱 <li>淇敼 NewProc 鐨勪唬鐮侊紝浠ヤ究 pData 涓繚瀛樼殑鏄?INJDATA 鐨勭湡瀹炲湴鍧銆?br>渚嬪錛屽亣璁?INJDATA 鐨勫湴鍧錛圴irtualAllocEx榪斿洖鐨勫鹼級(jí)鍦ㄧ洰鏍囪繘紼嬩腑鏄?0x008a0000銆傜劧鍚庤薄涓嬮潰榪欐牱淇敼NewProc鐨勪唬鐮侊細(xì) <pre> 558BECC745FCD0C0B0A0......8BE55DC21000 <- 鍘熸潵鐨凬ewProc 錛堟敞1錛? 558BECC745FC00008A00......8BE55DC21000 <- 淇敼鍚庣殑NewProc錛屼嬌鐢ㄧ殑鏄疘NJDATA鐨勫疄闄呭湴鍧銆?/pre> 涔熷氨鏄錛屼綘鐢ㄧ湡姝g殑 INJDATA錛堟敞2錛?鍦板潃鏇夸唬浜?jiǎn)铏氭嫙鍊?A0B0C0D0錛堟敞2錛夈?<br> <li>寮濮嬫墽琛岃繙紼嬬殑 ThreadFunc錛屽畠璐熻矗瀛愮被鍖栬繙紼嬭繘紼嬩腑鐨勬帶浠躲?br></li> </ol> <ul> <li>娉?銆佹湁浜哄彲鑳戒細(xì)闂紝涓轟粈涔堝湴鍧 A0B0C0D0 鍜?008a0000 鍦ㄧ紪璇戞椂欏哄簭鏄浉鍙嶇殑銆傚洜涓?Intel 鍜?AMD 澶勭悊鍣ㄤ嬌鐢?little-endian 絎﹀彿鏉ヨ〃紺猴紙澶氬瓧鑺傦級(jí)鏁版嵁銆傛崲鍙ヨ瘽璇達(dá)紝鏌愪釜鏁板瓧鐨勪綆浣嶅瓧鑺傝瀛樺偍鍦ㄥ唴瀛樼殑鏈灝忓湴鍧澶勶紝鑰岄珮浣嶅瓧鑺傝瀛樺偍鍦ㄦ渶楂樹綅鍦板潃銆?br>鍋囪“UNIX”榪欎釜璇嶅瓨鍌ㄧ敤4涓瓧鑺傦紝鍦?big-endian 緋葷粺涓紝瀹冭瀛樹負(fù)“UNIX”錛屽湪 little-endian 緋葷粺涓紝瀹冨皢琚瓨涓?#8220;XINU”銆? <li>娉?銆佹煇浜涚牬瑙o紙寰堢碂錛変互綾諱技鐨勬柟寮忎慨鏀瑰彲鎵ц浠g爜錛屼絾鏄竴鏃﹀姞杞藉埌鍐呭瓨錛屼竴涓▼搴忔槸鏃犳硶淇敼鑷繁鐨勪唬鐮佺殑錛堜唬鐮侀┗鐣欏湪鍙墽琛岀▼搴忕殑“.text” 鍖哄煙錛岃繖涓尯鍩熸槸鍐欎繚鎶ょ殑錛夈備絾浠嶅彲浠ヤ慨鏀硅繙紼嬬殑 NewProc錛屽洜涓哄畠鏄厛鍓嶄互 PAGE_EXECUTE_READWRITE 璁稿彲鏂瑰紡琚嫹璐濆埌鏌愪釜鍐呭瓨鍧椾腑鐨勩?</li> </ul> <p><a name=浣曟椂浣跨敤_CreateRemoteThread_鍜宊WriteProcessMemory_鎶鏈?浣曟椂浣跨敤 CreateRemoteThread 鍜?WriteProcessMemory 鎶鏈?/a><br><br>銆銆涓庡叾瀹冩柟娉曟瘮杈冿紝浣跨敤 CreateRemoteThread 鍜?WriteProcessMemory 鎶鏈繘琛屼唬鐮佹敞鍏ユ洿鐏墊椿錛岃繖縐嶆柟娉曚笉闇瑕侀澶栫殑 dll錛屼笉騫哥殑鏄紝璇ユ柟娉曟洿澶嶆潅騫朵笖椋庨櫓鏇村ぇ錛屽彧瑕乀hreadFunc鍑虹幇鍝曚竴涓佺偣閿欒錛屽緢瀹規(guī)槗灝辮錛堝茍涓旀渶澶у彲鑳藉湴浼?xì)锛?jí)浣胯繙紼嬭繘紼嬪穿婧冿紙鍙傝闄勫綍 F錛夛紝鍥犱負(fù)璋冭瘯榪滅▼ ThreadFunc 灝嗘槸涓涓彲鎬曠殑姊﹂瓏錛屽彧鏈夊湪娉ㄥ叆鐨勬寚浠ゆ暟寰堝皯鏃訛紝浣犳墠搴旇鑰冭檻浣跨敤榪欑鎶鏈繘琛屾敞鍏ワ紝瀵逛簬澶у潡鐨勪唬鐮佹敞鍏ワ紝鏈濂界敤 I.鍜孖I 閮ㄥ垎璁ㄨ鐨勬柟娉曘?br><br>WinSpy 浠ュ強(qiáng) InjectEx 璇蜂粠榪欓噷<a ><u><font color=#0000ff>涓嬭澆婧愪唬鐮?/font></u></a>銆?/p> <a name=緇撴潫璇?緇撴潫璇?/a> <p> </p> <p>鍒扮洰鍓嶄負(fù)姝紝鏈夊嚑涓棶棰樻槸鎴戜滑鏈彁鍙?qiáng)鐨勫Q岀幇鎬葷粨濡備笅錛?/p> <table id=table1 width="91%" border=0> <tbody> <tr> <td align=middle width=387><strong>瑙e喅鏂規(guī) </strong></td> <td align=middle><strong>OS</strong></td> <td align=middle width=356><strong>榪涚▼</strong></td> </tr> <tr> <td width=387>I銆丠ooks </td> <td>Win9x 鍜?WinNT</td> <td width=356>浠呬粎涓?USER32.DLL 錛堟敞3錛夐摼鎺ョ殑榪涚▼</td> </tr> <tr> <td width=387>II銆丆reateRemoteThread & LoadLibrary </td> <td>浠?WinNT錛堟敞4錛?/td> <td width=356>鎵鏈夎繘紼嬶紙娉?錛? 鍖呮嫭緋葷粺鏈嶅姟錛堟敞6錛?/td> </tr> <tr> <td width=387>III銆丆reateRemoteThread & WriteProcessMemory <br>銆</td> <td>浠?WinNT </td> <td width=356>鎵鏈夎繘紼? 鍖呮嫭緋葷粺鏈嶅姟</td> </tr> </tbody> </table> <ul> <li>娉?錛氭樉鐒?dòng)灱屼綘鏃犳硶hook涓涓病鏈夋秷鎭槦鍒楃殑綰跨▼錛屾澶栵紝SetWindowsHookEx涓嶈兘涓庣郴緇熸湇鍔′竴璧峰伐浣滐紝鍗充嬌瀹冧滑涓?USER32.DLL 榪涜閾炬帴錛? <li>娉?錛歐in9x 涓病鏈?CreateRemoteThread錛屼篃娌℃湁 VirtualAllocEx 錛堝疄闄呬笂錛屽湪Win9x 涓彲浠ヤ豢鐪燂紝浣嗕笉鏄湰鏂囪璁虹殑闂浜?jiǎn)锛?jí)錛? <li>娉?錛氭墍鏈夎繘紼?= 鎵鏈?Win32 榪涚▼ + csrss.exe<br>鏈湴搴旂敤 錛坰mss.exe, os2ss.exe, autochk.exe 絳夛級(jí)涓嶄嬌鐢?Win32 API錛屾墍浠ヤ篃涓嶄細(xì)涓?kernel32.dll 閾炬帴銆傚敮涓涓涓緥澶栨槸 csrss.exe錛學(xué)in32 瀛愮郴緇熸湰韜紝瀹冩槸鏈湴搴旂敤紼嬪簭錛屼絾鍏舵煇浜涘簱錛垀winsrv.dll錛夐渶瑕?Win32 DLLs錛屽寘鎷?kernel32.dll錛? <li>娉?錛氬鏋滀綘鎯寵灝嗕唬鐮佹敞鍏ュ埌緋葷粺鏈嶅姟涓紙lsass.exe, services.exe, winlogon.exe 絳夛級(jí)鎴朿srss.exe錛屽湪鎵撳紑榪滅▼鍙ユ焺錛圤penProcess錛変箣鍓嶏紝灝嗕綘鐨勮繘紼嬩紭鍏堢駭緗負(fù) “SeDebugPrivilege”錛圓djustTokenPrivileges錛夈?</li> </ul> <p>銆銆鏈鍚庯紝鏈夊嚑浠朵簨鎯呬竴瀹氳浜?jiǎn)鐒朵簬蹇?jī)錛氫綘鐨勬敞鍏ヤ唬鐮佸緢瀹規(guī)槗鎽ф瘉鐩爣榪涚▼錛屽挨鍏舵槸娉ㄥ叆浠g爜鏈韓鍑洪敊鐨勬椂鍊欙紝鎵浠ヨ璁頒綇錛氭潈鍔涘甫鏉ヨ矗浠伙紒<br>銆銆鍥犱負(fù)鏈枃涓殑璁稿渚嬪瓙鏄叧浜庡瘑鐮佺殑錛屼綘涔熻榪樿榪?Zhefu Zhang 鍐欑殑鍙﹀涓綃囨枃绔?#8220;<a target=_blank><u><font color=#0000ff>Super Password Spy++</font></u></a>” 錛屽湪璇ユ枃涓紝浠栬В閲婁簡(jiǎn)濡備綍鑾峰彇IE 瀵嗙爜妗嗕腑鐨勫唴瀹癸紝姝ゅ錛屼粬榪樼ず鑼冧簡(jiǎn)濡備綍淇濇姢浣犵殑瀵嗙爜鎺т歡鍏嶅彈綾諱技鐨勬敾鍑匯?/p> <p><a name=闄勫綍A>闄勫綍A</a>錛?/p> <p>涓轟粈涔?kernel32.dll 鍜寀ser32.dll 鎬繪槸琚槧灝勫埌鐩稿悓鐨勫湴鍧銆?br><br>銆銆鎴戠殑鍋囧畾錛氬洜涓篗icrosoft 鐨勭▼搴忓憳璁や負(fù)榪欐牱鍋氭湁鍔╀簬閫熷害浼樺寲錛屼負(fù)浠涔堝憿錛熸垜鐨勮В閲婃槸鈥斺旈氬父涓涓彲鎵ц紼嬪簭鏄敱鍑犱釜閮ㄥ垎緇勬垚錛屽叾涓寘鎷?#8220;.reloc” 銆傚綋閾炬帴鍣ㄥ垱寤?EXE 鎴栬?DLL鏂囦歡鏃訛紝瀹冨鏂囦歡琚槧灝勫埌鍝釜鍐呭瓨鍦板潃鍋氫簡(jiǎn)涓涓亣璁俱傝繖灝辨槸鎵璋撶殑棣栭夊姞杞?鍩哄湴鍧銆傚湪鏄犲儚鏂囦歡涓墍鏈夌粷瀵瑰湴鍧閮芥槸鍩轟簬閾炬帴鍣ㄩ閫夌殑鍔犺澆鍦板潃錛屽鏋滅敱浜庢煇縐嶅師鍥狅紝鏄犲儚鏂囦歡娌℃湁琚姞杞藉埌璇ュ湴鍧錛岄偅涔堣繖鏃?#8220;.reloc”灝辮搗浣滅敤浜?jiǎn)锛屽畠鍖呭惈鏄犲儚鏂囦欢涓殑鎵鏈夊湴鍧鐨勬竻鍗曪紝榪欎釜娓呭崟涓殑鍦板潃鍙嶆槧浜?jiǎn)閾炬帴鍣ㄩ閫夊姞杞藉湴鍧鍜屽疄闄呭姞杞藉湴鍧鐨勫樊鍒紙鏃犺濡備綍錛岃娉ㄦ剰緙栬瘧鍣ㄤ駭鐢熺殑澶у鏁版寚浠や嬌鐢ㄦ煇縐嶇浉瀵瑰湴鍧瀵誨潃錛屽洜姝わ紝騫舵病鏈変綘鎯寵薄鐨勯偅涔堝鍦板潃鍙緵閲嶆柊鍒嗛厤錛夛紝鍙︿竴鏂歸潰錛屽鏋滃姞杞藉櫒鑳藉鎸夌収閾炬帴鍣ㄩ閫夊湴鍧鍔犺澆鏄犲儚鏂囦歡錛岄偅涔?#8220;.reloc”灝辮瀹屽叏蹇界暐鎺変簡(jiǎn)銆?br>銆銆浣唊ernel32.dll 鍜寀ser32.dll 鍙?qiáng)鍏跺姞铦插湴鍧涓轟綍瑕佷互榪欑鏂瑰紡鍔犺澆鍛紵鍥犱負(fù)姣忎竴涓?Win32 紼嬪簭閮介渶瑕乲ernel32.dll錛屽茍涓斿ぇ澶氭暟Win32 紼嬪簭涔熼渶瑕?user32.dll錛岄偅涔堟繪槸灝嗗畠浠紙kernel32.dll 鍜寀ser32.dll錛夋槧灝勫埌棣栭夊湴鍧鍙互鏀硅繘鎵鏈夊彲鎵ц紼嬪簭鐨勫姞杞芥椂闂淬傝繖鏍蜂竴鏉ワ紝鍔犺澆鍣ㄧ粷涓嶈兘淇敼kernel32.dll and user32.dll.涓殑浠諱綍錛堢粷瀵癸級(jí)鍦板潃銆傛垜浠敤涓嬮潰鐨勪緥瀛愭潵璇存槑錛?br>銆銆灝嗘煇涓簲鐢ㄧ▼搴?App.exe 鐨勬槧鍍忓熀鍦板潃璁劇疆鎴?KERNEL32鐨勫湴鍧錛?base:"0x77e80000"錛夋垨 USER32鐨勯閫夊熀鍦板潃錛?base:"0x77e10000"錛夛紝濡傛灉 App.exe 涓嶆槸浠?USER32 瀵煎叆鏂瑰紡鏉ヤ嬌鐢?USER32錛岃屾槸閫氳繃LoadLibrary 鍔犺澆錛岄偅涔堢紪璇戝茍榪愯App.exe 鍚庯紝浼?xì)鎶ュ嚭閿欒淇℃伅锛?Illegal System DLL Relocation"鈥斺旈潪娉曠郴緇烡LL鍦板潃閲嶅垎閰嶏級(jí)錛孉pp.exe 鍔犺澆澶辮觸銆?br>涓轟粈涔堜細(xì)榪欐牱鍛紵褰撳垱寤鴻繘紼嬫椂錛學(xué)in 2000銆乄in XP 鍜學(xué)in 2003緋葷粺鐨勫姞杞藉櫒瑕佹鏌?kernel32.dll 鍜寀ser32.dll 鏄惁琚槧灝勫埌棣栭夊熀鍦板潃錛堝疄闄呬笂錛屽畠浠殑鍚嶅瓧閮借紜紪鐮佽繘浜?jiǎn)鍔犺浇鍣ㄥQ夛紝濡傛灉娌℃湁琚姞杞藉埌棣栭夊熀鍦板潃錛屽皢鍙戝嚭閿欒銆傚湪 WinNT4涓紝涔熶細(xì)媯(gè)鏌le32.dll錛屽湪WinNT 3.51 鍜岃緝浣庣増鏈殑Windows涓紝鐢變簬涓嶄細(xì)鍋氳繖鏍風(fēng)殑媯(gè)鏌ワ紝鎵浠ernel32.dll 鍜寀ser32.dll鍙互琚姞杞戒換浣曞湴鏂廣傚彧鏈塶tdll.dll鎬繪槸琚姞杞藉埌鍏跺熀鍦板潃錛屽姞杞藉櫒涓嶈繘琛屾鏌ワ紝涓鏃tdll.dll娌℃湁鍦ㄥ叾鍩哄湴鍧錛岃繘紼嬪氨鏃犳硶鍒涘緩銆?br><br>鎬諱箣錛屽浜?WinNT 4 鍜岃緝楂樼殑鐗堟湰涓?/p> <ul> <li>涓瀹氳琚姞杞藉埌鍩哄湴鍧鐨凞LLs 鏈夛細(xì)kernel32.dll銆乽ser32.dll 鍜宯tdll.dll錛? <li>姣忎釜Win32 紼嬪簭閮借浣跨敤鐨?DLLs+ csrss.exe錛歬ernel32.dll 鍜宯tdll.dll錛? <li>姣忎釜榪涚▼閮借浣跨敤鐨凞LL鍙湁涓涓紝鍗充嬌鏄湰鍦板簲鐢細(xì)ntdll.dll錛?</li> </ul> <p><a name=闄勫綍B>闄勫綍B</a>錛?/p> <p>/GZ 緙栬瘧鍣ㄥ紑鍏?/p> <p>銆銆鍦ㄧ敓鎴?Debug 鐗堟湰鏃訛紝/GZ 緙栬瘧鍣ㄧ壒鎬ф槸榛樿鎵撳紑鐨勩備綘鍙互鐢ㄥ畠鏉ユ崟鑾鋒煇浜涢敊璇紙鍏蜂綋緇嗚妭璇峰弬鑰冪浉鍏蟲枃妗o級(jí)銆備絾瀵規(guī)垜浠殑鍙墽琛岀▼搴忔剰鍛崇潃浠涔堝憿錛?br>銆銆褰撴墦寮 /GZ 寮鍏籌紝緙栬瘧鍣ㄤ細(xì)娣誨姞涓浜涢澶栫殑浠g爜鍒板彲鎵ц紼嬪簭涓瘡涓嚱鏁版墍鍦ㄧ殑鍦版柟錛屽寘鎷竴涓嚱鏁拌皟鐢紙琚姞鍒版瘡涓嚱鏁扮殑鏈鍚庯級(jí)鈥斺旀鏌ュ凡緇忚鎴戜滑鐨勫嚱鏁頒慨鏀圭殑 ESP鍫嗘爤鎸囬拡銆備粈涔堬紒闅鵑亾鏈変竴涓嚱鏁拌皟鐢ㄨ娣誨姞鍒?ThreadFunc 鍚楋紵閭e皢瀵艱嚧鐏鵑毦銆俆hreadFunc 鐨勮繙紼嬫嫹璐濆皢璋冪敤涓涓湪榪滅▼榪涚▼涓笉瀛樺湪鐨勫嚱鏁幫紙鑷沖皯鏄湪鐩稿悓鐨勫湴鍧絀洪棿涓笉瀛樺湪錛?/p> <a name=闄勫綍C>闄勫綍C</a>錛? <p> </p> <p>闈?rùn)鎬佸嚱鏁板拰澧為噺閾炬帴</p> <p>銆銆澧為噺閾炬帴涓昏浣滅敤鏄湪鐢熸垚搴旂敤紼嬪簭鏃剁緝鐭摼鎺ユ椂闂淬傚父瑙勯摼鎺ュ拰澧為噺閾炬帴鐨勫彲鎵ц紼嬪簭涔嬮棿鐨勫樊鍒槸鈥斺斿閲忛摼鎺ユ椂錛屾瘡涓嚱鏁拌皟鐢ㄧ粡鐢變竴涓澶栫殑JMP鎸囦護(hù)錛岃鎸囦護(hù)鐢遍摼鎺ュ櫒鍙戝嚭錛堣瑙勫垯鐨勪竴涓緥澶栨槸鍑芥暟澹版槑涓洪潤(rùn)鎬侊級(jí)銆傝繖浜?JMP 鎸囦護(hù)鍏佽閾炬帴鍣ㄥ湪鍐呭瓨涓Щ鍔ㄥ嚱鏁幫紝榪欑縐誨姩鏃犻渶淇敼寮曠敤鍑芥暟鐨?CALL鎸囦護(hù)銆備絾榪欎簺JMP鎸囦護(hù)涔熺‘瀹炲鑷翠簡(jiǎn)涓浜涢棶棰橈細(xì)濡?ThreadFunc 鍜?AfterThreadFunc 灝嗘寚鍚慗MP鎸囦護(hù)鑰屼笉鏄疄闄呯殑浠g爜銆傛墍浠ュ綋璁$畻ThreadFunc 鐨勫ぇ灝忔椂錛?</p> <pre>const int cbCodeSize = ((LPBYTE) AfterThreadFunc - (LPBYTE) ThreadFunc) </pre> 銆銆浣犲疄闄呬笂璁$畻鐨勬槸鎸囧悜 ThreadFunc 鐨凧MPs 鍜孉fterThreadFunc涔嬮棿鐨?#8220;璺濈” 錛堥氬父瀹冧滑浼?xì)绱ф尐鐫錛屼笉鐢ㄨ冭檻璺濈闂錛夈傜幇鍦ㄥ亣璁?ThreadFunc 鐨勫湴鍧浣嶄簬004014C0 鑰屼即闅忕殑 JMP鎸囦護(hù)浣嶄簬 00401020銆? <pre>:00401020 jmp 004014C0 ... :004014C0 push EBP ; ThreadFunc 鐨勫疄闄呭湴鍧 :004014C1 mov EBP, ESP ... </pre> 閭d箞 <pre>WriteProcessMemory( .., &ThreadFunc, cbCodeSize, ..); </pre> 銆銆灝嗘嫹璐?#8220;JMP 004014C0”鎸囦護(hù)錛堜互鍙?qiáng)闅忓悗cbCodeSize鑼冨洿鍐呯殑鎵鏈夋寚浠わ級(jí)鍒拌繙紼嬭繘紼嬧斺斾笉鏄疄闄呯殑 ThreadFunc銆傝繙紼嬭繘紼嬭鎵ц鐨勭涓浠朵簨鎯呭皢鏄?#8220;JMP 004014C0” 銆傚畠?yōu)畣浼?xì)鍦ㄥ叾鏈鍚庡嚑鏉℃寚浠ゅ綋涓斺旇繙紼嬭繘紼嬪拰鎵鏈夎繘紼嬪潎濡傛銆備絾 JMP鎸囦護(hù)鐨勮繖涓?#8220;瑙勫垯”涔熸湁渚嬪銆傚鏋滄煇涓嚱鏁拌澹版槑涓洪潤(rùn)鎬佺殑錛屽畠?yōu)畣浼?xì)琚洿鎺ヨ皟鐢紝鍗充嬌澧為噺閾炬帴涔熸槸濡傛銆傝繖灝辨槸涓轟粈涔堣鍒?4瑕佸皢 ThreadFunc 鍜?AfterThreadFunc 澹版槑涓洪潤(rùn)鎬佹垨紱佺敤澧為噺閾炬帴鐨勭紭鏁呫傦紙鏈夊叧澧為噺閾炬帴鐨勫叾瀹冧俊鎭弬瑙?Matt Pietrek鐨勬枃绔?#8220;Remove Fatty Deposits from Your Applications Using Our 32-bit Liposuction Tools” 錛? <p><a name=闄勫綍D>闄勫綍D</a>錛?/p> <p>涓轟粈涔?ThreadFunc鐨勫眬閮ㄥ彉閲忓彧鏈?4k錛?/p> <p>銆銆灞閮ㄥ彉閲忔繪槸瀛樺偍鍦ㄥ爢鏍堜腑錛屽鏋滄煇涓嚱鏁版湁256涓瓧鑺傜殑灞閮ㄥ彉閲忥紝褰撹繘鍏ヨ鍑芥暟鏃訛紝鍫嗘爤鎸囬拡灝卞噺灝?56涓瓧鑺傦紙鏇寸簿紜湴璇達(dá)紝鍦ㄥ嚱鏁板紑濮嬪錛夈備緥濡傦紝涓嬮潰榪欎釜鍑芥暟錛?</p> <pre>void Dummy(void) { BYTE var[256]; var[0] = 0; var[1] = 1; var[255] = 255; } </pre> 緙栬瘧鍚庣殑姹囩紪濡備笅錛? <pre>:00401000 push ebp :00401001 mov ebp, esp :00401003 sub esp, 00000100 ; change ESP as storage for ; local variables is needed :00401006 mov byte ptr [esp], 00 ; var[0] = 0; :0040100A mov byte ptr [esp+01], 01 ; var[1] = 1; :0040100F mov byte ptr [esp+FF], FF ; var[255] = 255; :00401017 mov esp, ebp ; restore stack pointer :00401019 pop ebp :0040101A ret </pre> 銆銆娉ㄦ剰涓婅堪渚嬪瓙涓紝鍫嗘爤鎸囬拡鏄浣曡淇敼鐨勶紵鑰屽鏋滄煇涓嚱鏁伴渶瑕?KB浠ヤ笂灞閮ㄥ彉閲忓唴瀛樼┖闂村張浼?xì)鎬庝箞鏍峰憿錛熷叾瀹烇紝鍫嗘爤鎸囬拡騫朵笉鏄鐩存帴淇敼錛岃屾槸閫氳繃鍙︿竴涓嚱鏁拌皟鐢ㄦ潵淇敼鐨勩傚氨鏄繖涓澶栫殑鍑芥暟璋冪敤浣垮緱鎴戜滑鐨?ThreadFunc “琚牬鍧?#8221;浜?jiǎn)锛屽洜湄?fù)鍏惰繙紼嬫嫹璐濅細(xì)璋冪敤涓涓笉瀛樺湪鐨勪笢瑗褲?br>銆銆鎴戜滑鐪嬬湅鏂囨。涓鍫嗘爤鎺㈡祴鍜?/Gs緙栬瘧鍣ㄩ夐」鏄庝箞璇寸殑錛?br>鈥斺?#8220;/GS鏄竴涓帶鍒跺爢鏍堟帰嫻嬬殑楂樼駭鐗規(guī)э紝鍫嗘爤鎺㈡祴鏄竴緋誨垪緙栬瘧鍣ㄦ彃鍏ュ埌姣忎釜鍑芥暟璋冪敤鐨勪唬鐮併傚綋鍑芥暟琚縺媧繪椂錛屽爢鏍堟帰嫻嬮渶瑕佺殑鍐呭瓨絀洪棿鏉ュ瓨鍌ㄧ浉鍏沖嚱鏁扮殑灞閮ㄥ彉閲忋?br>銆銆濡傛灉鍑芥暟闇瑕佺殑絀洪棿澶т簬涓哄眬閮ㄥ彉閲忓垎閰嶇殑鍫嗘爤絀洪棿錛屽叾鍫嗘爤鎺㈡祴琚縺媧匯傞粯璁ょ殑澶у皬鏄竴涓〉闈紙鍦?0x86澶勭悊鍣ㄤ笂4kb錛夈傝繖涓煎厑璁稿湪Win32 搴旂敤紼嬪簭鍜學(xué)indows NT铏氭嫙鍐呭瓨綆$悊鍣ㄤ箣闂磋繘琛岃皚鎱庤皟鏁翠互渚垮鍔犺繍琛屾椂鎵胯緇欑▼搴忓爢鏍堢殑鍐呭瓨銆?#8221;<br>鎴戠‘淇℃湁浜轟細(xì)闂細(xì)鏂囨。涓殑“……鍫嗘爤鎺㈡祴鍒頒竴鍧楅渶瑕佺殑鍐呭瓨絀洪棿鏉ュ瓨鍌ㄧ浉鍏沖嚱鏁扮殑灞閮ㄥ彉閲?#8230;…”閭d簺緙栬瘧鍣ㄩ夐」錛堝畠浠殑鎻忚堪錛夊湪浣犲畬鍏ㄥ紕鏄庣櫧涔嬪墠鏈夋椂鐪熺殑璁╀漢姘旀劋銆備緥濡傦紝濡傛灉鏌愪釜鍑芥暟闇瑕?2KB鐨勫眬閮ㄥ彉閲忓瓨鍌ㄧ┖闂達(dá)紝鍫嗘爤鍐呭瓨灝嗚繘琛屽涓嬫柟寮忕殑鍒嗛厤錛堟洿綺劇‘鍦拌鏄?#8220;鎵胯” 錛夈? <pre>sub esp, 0x1000 ; "鍒嗛厤" 絎竴嬈?4 Kb test [esp], eax ; 鎵胯涓涓柊欏靛唴瀛橈紙濡傛灉榪樻病鏈夋壙璇猴級(jí) sub esp, 0x1000 ; "鍒嗛厤" 絎簩嬈? Kb test [esp], eax ; ... sub esp, 0x1000 test [esp], eax </pre> 銆銆娉ㄦ剰4KB鍫嗘爤鎸囬拡鏄浣曡淇敼鐨勶紝鏇撮噸瑕佺殑鏄紝姣忎竴姝ヤ箣鍚庡爢鏍堝簳鏄浣曡“瑙﹀強(qiáng)”錛堣緇忚繃媯(gè)鏌ワ級(jí)銆傝繖鏍蜂繚璇佸湪“鍒嗛厤”錛堟壙璇猴級(jí)鍙︿竴欏甸潰涔嬪墠錛屽綋鍓嶉〉闈㈡壙璇虹殑鑼冨洿涔熷寘鍚爢鏍堝簳銆? <p>娉ㄦ剰浜嬮」<br>銆銆“姣忎竴涓嚎紼嬪埌杈懼叾鑷繁鐨勫爢鏍堢┖闂達(dá)紝榛樿鎯呭喌涓嬶紝姝ょ┖闂寸敱鎵胯鐨勪互鍙?qiáng)棰勭暀鐨勫唴瀛樉l勬垚錛屾瘡涓嚎紼嬩嬌鐢?1 MB棰勭暀鐨勫唴瀛橈紝浠ュ強(qiáng)涓欏墊壙璇虹殑鍐呭瓨錛岀郴緇熷皢鏍規(guī)嵁闇瑕佷粠棰勭暀鐨勫爢鏍堝唴瀛樹腑鎵胯涓欏靛唴瀛樺尯鍩?#8221; 錛堝弬瑙?MSDN CreateThread > dwStackSize > Thread Stack Size錛?br>銆銆榪樺簲璇ユ竻妤氫負(fù)浠涔堟湁鍏熾/GS 鐨勬枃妗h鍦ㄥ爢鏍堟帰閽堝湪 Win32 搴旂敤紼嬪簭鍜學(xué)indows NT铏氭嫙鍐呭瓨綆$悊鍣ㄤ箣闂磋繘琛岃皚鎱庤皟鏁淬?br><br>鐜板湪鍥炲埌鎴戜滑鐨凾hreadFunc浠ュ強(qiáng) 4KB 闄愬埗<br>銆銆铏界劧浣犲彲浠ョ敤 /Gs 闃叉璋冪敤鍫嗘爤鎺㈡祴渚嬬▼錛屼絾鍦ㄦ枃妗e浜庤繖鏍風(fēng)殑鍋氭硶緇欏嚭浜?jiǎn)璀﹀憡锛屾澶栧Q屾枃浠舵弿榪板彲浠ョ敤 #pragma check_stack 鎸囦護(hù)鍏抽棴鎴栨墦寮鍫嗘爤鎺㈡祴銆備絾鏄繖涓寚浠ゅソ鍍忎竴鐐逛綔鐢ㄩ兘娌℃湁錛堣涔堣繖涓枃妗f槸鍨冨溇錛岃涔堟垜鐤忓拷浜?jiǎn)鍏跺畠涓浜涗俊鎭紵錛夈傛諱箣錛孋reateRemoteThread 鍜?WriteProcessMemory 鎶鏈彧鑳界敤浜庢敞鍏ュ皬鍧椾唬鐮侊紝鎵浠ヤ綘鐨勫眬閮ㄥ彉閲忓簲璇ュ敖閲忓皯鑰楄垂涓浜涘唴瀛樺瓧鑺傦紝鏈濂戒笉瑕佽秴榪?4KB闄愬埗銆?/p> <a name=闄勫綍E>闄勫綍E</a>錛? <p> </p> <p>涓轟粈涔堣灝嗗紑鍏寵鍙ユ媶鍒嗘垚涓変釜浠ヤ笂?</p> <p>鐢ㄤ笅闈㈣繖涓緥瀛愬緢瀹規(guī)槗瑙i噴榪欎釜闂錛屽亣璁炬湁濡備笅榪欎箞涓涓嚱鏁幫細(xì) </p> <pre>int Dummy( int arg1 ) { int ret =0; switch( arg1 ) { case 1: ret = 1; break; case 2: ret = 2; break; case 3: ret = 3; break; case 4: ret = 0xA0B0; break; } return ret; } </pre> 緙栬瘧鍚庡彉鎴愪笅闈㈣繖涓牱瀛愶細(xì) <pre>鍦板潃 鎿嶄綔鐮?鍙傛暟 瑙i噴鍚庣殑鎸囦護(hù) -------------------------------------------------- ; arg1 -> ECX :00401000 8B4C2404 mov ecx, dword ptr [esp+04] :00401004 33C0 xor eax, eax ; EAX = 0 :00401006 49 dec ecx ; ECX -- :00401007 83F903 cmp ecx, 00000003 :0040100A 771E ja 0040102A ; JMP 鍒拌〃***涓殑鍦板潃涔嬩竴 ; 娉ㄦ剰 ECX 鍖呭惈鐨勫亸縐? :0040100C FF248D2C104000 jmp dword ptr [4*ecx+0040102C] :00401013 B801000000 mov eax, 00000001 ; case 1: eax = 1; :00401018 C3 ret :00401019 B802000000 mov eax, 00000002 ; case 2: eax = 2; :0040101E C3 ret :0040101F B803000000 mov eax, 00000003 ; case 3: eax = 3; :00401024 C3 ret :00401025 B8B0A00000 mov eax, 0000A0B0 ; case 4: eax = 0xA0B0; :0040102A C3 ret :0040102B 90 nop ; 鍦板潃琛?** :0040102C 13104000 DWORD 00401013 ; jump to case 1 :00401030 19104000 DWORD 00401019 ; jump to case 2 :00401034 1F104000 DWORD 0040101F ; jump to case 3 :00401038 25104000 DWORD 00401025 ; jump to case 4 </pre> 娉ㄦ剰濡備綍瀹炵幇榪欎釜寮鍏寵鍙ワ紵<br><br>銆銆涓庡叾鍗曠嫭媯(gè)鏌ユ瘡涓狢ASE璇彞錛屼笉濡傚垱寤轟竴涓湴鍧琛紝鐒跺悗閫氳繃綆鍗曞湴璁$畻鍦板潃琛ㄧ殑鍋忕Щ閲忚岃煩杞埌姝g‘鐨凜ASE璇彞銆傝繖瀹為檯涓婃槸涓縐嶆敼榪涖傚亣璁句綘鏈?0涓狢ASE璇彞銆傚鏋滀笉浣跨敤涓婅堪鐨勬妧宸э紝浣犲緱鎵ц50嬈?CMP鍜孞MP鎸囦護(hù)鏉ヨ揪鍒版渶鍚庝竴涓狢ASE銆傜浉鍙嶏紝鏈変簡(jiǎn)鍦板潃琛ㄥ悗錛屼綘鍙互閫氳繃琛ㄦ煡璇㈣煩杞埌浠諱綍CASE璇彞錛屼粠璁$畻鏈虹畻娉曡搴﹀拰鏃墮棿澶嶆潅搴︾湅錛屾垜浠敤O(5)浠f浛浜?jiǎn)O(2n)綆楁硶銆傚叾涓細(xì) <ol> <li>O琛ㄧず鏈鍧忕殑鏃墮棿澶嶆潅搴︼紱 <li>鎴戜滑鍋囪闇瑕?鏉℃寚浠ゆ潵榪涜琛ㄦ煡璇㈣綆楀亸縐婚噺錛屾渶緇堣煩鍒扮浉搴旂殑鍦板潃錛?</li> </ol> <p>銆銆鐜板湪錛屼綘涔熻璁や負(fù)鍑虹幇涓婅堪鎯呭喌鍙槸鍥犱負(fù)CASE甯擱噺琚湁鎰忛夋嫨涓鴻繛緇殑錛?錛?錛?錛?錛夈傚垢榪愮殑鏄紝瀹冪殑榪欎釜鏂規(guī)鍙互搴旂敤浜庡ぇ澶氭暟鐜板疄渚嬪瓙涓紝鍙湁鍋忕Щ閲忕殑璁$畻紼嶅井鏈変簺澶嶆潅銆備絾鏈変袱涓緥澶栵細(xì)</p> <ul> <li>濡傛灉CASE璇彞灝戜簬絳変簬涓変釜錛? <li>濡傛灉CASE 甯擱噺瀹屽叏浜掍笉鐩稿叧錛堝錛?#8220;"case 1” 錛?#8220;case 13” 錛?#8220;case 50” 錛?鍜?#8220;case 1000” 錛夛紱 </li> </ul> <p>銆銆鏄劇劧錛屽崟鐙垽鏂瘡涓殑CASE甯擱噺鐨勮瘽錛岀粨鏋滀唬鐮佺箒鐞愯楁椂錛屼絾浣跨敤CMP鍜孞MP鎸囦護(hù)鍒欎嬌寰楃粨鏋滀唬鐮佺殑鎵ц灝卞儚鏅氱殑if-else 璇彞銆?br>鏈夎叮鐨勫湴鏂癸細(xì)濡傛灉浣犱笉鏄庣櫧CASE璇彞浣跨敤甯擱噺琛ㄨ揪寮忕殑鐞嗙敱錛岄偅涔堢幇鍦ㄥ簲璇ュ紕鏄庣櫧浜?jiǎn)鍚с備負(fù)浜?jiǎn)鍒涘缓鍦板潃琛紝鏄劇劧鍦ㄧ紪璇戞椂灝卞簲璇ョ煡閬撶浉鍏沖湴鍧銆?/p> <p>鐜板湪鍥炲埌闂錛?br>娉ㄦ剰鍒板湴鍧 0040100C 澶勭殑JMP鎸囦護(hù)浜?jiǎn)鍚楀Q熸垜浠潵鐪嬬湅Intel鍏充簬鍗佸叚榪涘埗鎿嶄綔鐮?FF 鐨勬枃妗f槸鎬庝箞璇寸殑錛?/p> <pre>鎿嶄綔鐮併鎸囦護(hù) 銆銆銆銆鎻忚堪 FF /4 銆JMP r/m32 銆Jump near, absolute indirect, 銆銆銆銆銆銆銆銆銆銆銆address given in r/m32</pre> <p>銆銆鍘熸潵JMP 浣跨敤浜?jiǎn)涓縐嶇粷瀵瑰鍧鏂瑰紡錛屼篃灝辨槸璇達(dá)紝瀹冪殑鎿嶄綔鏁幫紙CASE璇彞涓殑 0040102C錛夎〃紺轟竴涓粷瀵瑰湴鍧銆傝繕鐢ㄦ垜璇翠粈涔堝悧錛熻繙紼?ThreadFunc 浼?xì)鐩茬洰鍦拌湄?fù)鍦板潃琛ㄤ腑寮鍏沖湴鍧鏄?0040102C錛孞MP鍒頒竴涓敊璇殑鍦版柟錛岄犳垚榪滅▼榪涚▼宕╂簝銆?</p> <a name=闄勫綍F>闄勫綍F</a>錛? <p> </p> <p>涓轟粈涔堣繙紼嬭繘紼嬩細(xì)宕╂簝鍛紵</p> <p>褰撹繙紼嬭繘紼嬪穿婧冩椂錛屽畠鎬繪槸浼?xì)鍥犱皋Z笅闈㈣繖浜涘師鍥狅細(xì)</p> <ol> <li>鍦═hreadFunc 涓紩鐢ㄤ簡(jiǎn)涓涓笉瀛樺湪鐨勪覆錛? <li>鍦ㄥ湪ThreadFunc 涓?涓竴涓垨澶氫釜鎸囦護(hù)浣跨敤緇濆瀵誨潃錛堝弬瑙侀檮褰旹錛夛紱 <li>ThreadFunc 璋冪敤鏌愪釜涓嶅瓨鍦ㄧ殑鍑芥暟錛堣璋冪敤鍙兘鏄紪璇戝櫒鎴栭摼鎺ュ櫒娣誨姞鐨勶級(jí)銆備綘鍦ㄥ弽姹囩紪鍣ㄤ腑鍙互鐪嬪埌榪欐牱鐨勬儏褰細(xì) <pre>:004014C0 push EBP ; ThreadFunc 鐨勫叆鍙g偣 :004014C1 mov EBP, ESP ... :004014C5 call 0041550 ; 榪欓噷灝嗕嬌榪滅▼榪涚▼宕╂簝 ... :00401502 ret </pre> 濡傛灉 CALL 鏄敱緙栬瘧鍣ㄦ坊鍔犵殑鎸囦護(hù)錛堝洜涓烘煇浜?#8220;紱佸繉” 寮鍏沖/GZ鏄墦寮鐨勶級(jí)錛屽畠?yōu)畣琚畾浣嶅?ThreadFunc 鐨勫紑濮嬬殑鏌愪釜鍦版柟鎴栬呯粨灝懼銆?</li> </ol> <p>銆銆涓嶇鍝鎯呭喌錛屼綘閮借灝忓績(jī)緲肩考鍦頒嬌鐢?CreateRemoteThread 鍜?WriteProcessMemory 鎶鏈傚挨鍏惰娉ㄦ剰浣犵殑緙栬瘧鍣?閾炬帴鍣ㄩ夐」錛屼竴涓嶅皬蹇?jī)瀹冧滑灏变細(xì)鍦?ThreadFunc 娣誨姞鍐呭銆?</p> <img src ="http://www.shnenglu.com/road420/aggbug/126755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/road420/" target="_blank">娣遍們鑰?/a> 2010-09-16 14:06 <a href="http://www.shnenglu.com/road420/archive/2010/09/16/126755.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>CreateRemoteThread http://www.shnenglu.com/road420/archive/2010/09/16/126754.html娣遍們鑰?/dc:creator>娣遍們鑰?/author>Thu, 16 Sep 2010 06:05:00 GMThttp://www.shnenglu.com/road420/archive/2010/09/16/126754.htmlhttp://www.shnenglu.com/road420/comments/126754.htmlhttp://www.shnenglu.com/road420/archive/2010/09/16/126754.html#Feedback0http://www.shnenglu.com/road420/comments/commentRss/126754.htmlhttp://www.shnenglu.com/road420/services/trackbacks/126754.htmlCreateRemoteThread鎻愪緵浜?jiǎn)涓涓湪榪滅▼榪涚▼涓墽琛屼唬鐮佺殑鏂規(guī)硶,灝卞儚浠g爜闀垮嚭緲呰唨椋炲埌鍒榪愯銆傛湰鏂囧皢鍋氫竴涓叆闂ㄤ粙緇嶏紝甯屾湜瀵瑰箍澶х紪紼嬬埍濂借呮湁鎵甯姪銆?

鍏堣В閲婁竴涓嬭繙紼嬭繘紼嬶紝鍏跺疄灝辨槸瑕佹鍏ヤ綘鐨勪唬鐮佺殑榪涚▼錛岀浉瀵逛簬浣犵殑宸ヤ綔榪涚▼錛堝鏋滃彨鏈湴榪涚▼鐨勮瘽錛夊畠?yōu)鍙珮q滅▼榪涚▼錛屽彲鐞嗚В涓哄涓匯?/p>

棣栧厛浠嬬粛涓涓嬫垜浠殑涓昏宸ュ叿CreateRemoteThread錛岃繖閲屽厛灝嗗嚱鏁板師鍨嬬畝鍗曚粙緇嶄互涓嬨?/p>

CreateRemoteThread鍙皢綰跨▼鍒涘緩鍦ㄨ繙紼嬭繘紼嬩腑銆?/p>

鍑芥暟鍘熷瀷
HANDLE CreateRemoteThread(
HANDLE hProcess,                          // handle to process
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
SIZE_T dwStackSize,                       // initial stack size
LPTHREAD_START_ROUTINE lpStartAddress,    // thread function
LPVOID lpParameter,                       // thread argument
DWORD dwCreationFlags,                    // creation option
LPDWORD lpThreadId                        // thread identifier
);
鍙傛暟璇存槑錛?br>hProcess
[杈撳叆] 榪涚▼鍙ユ焺
lpThreadAttributes
[杈撳叆] 綰跨▼瀹夊叏鎻忚堪瀛楋紝鎸囧悜SECURITY_ATTRIBUTES緇撴瀯鐨勬寚閽?br>dwStackSize
[杈撳叆] 綰跨▼鏍堝ぇ灝忥紝浠ュ瓧鑺傝〃紺?br>lpStartAddress
[杈撳叆] 涓涓狶PTHREAD_START_ROUTINE綾誨瀷鐨勬寚閽堬紝鎸囧悜鍦ㄨ繙紼嬭繘紼嬩腑鎵ц鐨勫嚱鏁板湴鍧
lpParameter
[杈撳叆] 浼犲叆鍙傛暟
dwCreationFlags
[杈撳叆] 鍒涘緩綰跨▼鐨勫叾瀹冩爣蹇?/p>

lpThreadId
[杈撳嚭] 綰跨▼韜喚鏍囧織錛屽鏋滀負(fù)NULL,鍒欎笉榪斿洖

榪斿洖鍊?br>鎴愬姛榪斿洖鏂扮嚎紼嬪彞鏌勶紝澶辮觸榪斿洖NULL錛屽茍涓斿彲璋冪敤GetLastError鑾峰緱閿欒鍊箋?/p>

鎺ヤ笅鏉ユ垜浠皢浠ヤ袱縐嶆柟寮忎嬌鐢–reateRemoteThread錛屽ぇ瀹跺彲浠ラ鐣ュ埌CreateRemoteThread鐨勭閫氾紝瀹冧嬌浣犵殑浠g爜鍙互鑴辯浣犵殑榪涚▼錛屾鍏ュ埌鍒殑榪涚▼涓繍琛屻?/p>


絎竴縐嶆柟寮?

絎竴縐嶆柟寮忥紝鎴戜滑浣跨敤鍑芥暟鐨勫艦寮忋傚嵆鎴戜滑灝嗚嚜宸辯▼搴忎腑鐨勪竴涓嚱鏁版鍏ュ埌榪滅▼榪涚▼涓?/p>

姝ラ1錛氶鍏堝湪浣犵殑榪涚▼涓垱寤哄嚱鏁癕yFunc錛屾垜浠皢鎶婂畠鏀懼湪鍙︿竴涓繘紼嬩腑榪愯錛岃繖閲屼互windows

璁$畻鍣ㄤ負(fù)鐩爣榪涚▼銆?br>static DWORD WINAPI MyFunc (LPVOID pData)
{
//do something
//...
//pData杈撳叆欏瑰彲浠ユ槸浠諱綍綾誨瀷鍊?br>//榪欓噷鎴戜滑浼?xì)浼犲叆涓涓狣WORD鐨勫煎仛紺轟緥錛屽茍涓旂畝鍗曡繑鍥?br>return *(DWORD*)pData;
}
static void AfterMyFunc (void) {
}
榪欓噷鏈変釜灝忔妧宸э紝瀹氫箟浜?jiǎn)涓涓猻tatic void AfterMyFunc (void)錛涗負(fù)浜?jiǎn)涓嬮潰纭畾鎴戜滑鐨勪唬鐮佸ぇ灏?/p>

姝ラ2錛氬畾浣嶇洰鏍囪繘紼嬶紝榪欓噷鏄竴涓綆楀櫒
HWND hStart = ::FindWindow (TEXT("SciCalc"),NULL);

姝ラ3錛氳幏寰楃洰鏍囪繘紼嬪彞鏌勶紝榪欓噷鐢ㄥ埌涓や釜涓嶅お甯哥敤鐨勫嚱鏁幫紙褰撶劧濡傛灉緇忓父鍋氱嚎紼?榪涚▼絳夋柟闈㈢殑 欏圭洰鐨勮瘽錛屽氨寰堥潰鐔熶簡(jiǎn)錛夛紝浣嗗強(qiáng)鏈夌敤
DWORD PID, TID;
TID = ::GetWindowThreadProcessId (hStart, &PID);

HANDLE hProcess;
hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,PID);

姝ラ4錛氬湪鐩爣榪涚▼涓厤鍙橀噺鍦板潃絀洪棿錛岃繖閲屾垜浠垎閰?0涓瓧鑺傦紝騫朵笖璁懼畾涓哄彲浠ヨ

鍐橮AGE_READWRITE錛屽綋鐒朵篃鍙涓哄彧璇葷瓑鍏跺畠鏍囧織錛岃繖閲屽氨涓嶄竴涓璇存槑浜?jiǎn)銆?br>char szBuffer[10];
*(DWORD*)szBuffer=1000;//for test
void *pDataRemote =(char*) VirtualAllocEx( hProcess, 0, sizeof(szBuffer), MEM_COMMIT,

PAGE_READWRITE );

姝ラ5錛氬啓鍐呭鍒扮洰鏍囪繘紼嬩腑鍒嗛厤鐨勫彉閲忕┖闂?br>::WriteProcessMemory( hProcess, pDataRemote, szBuffer,(sizeof(szBuffer),NULL);

姝ラ6錛氬湪鐩爣榪涚▼涓垎閰嶄唬鐮佸湴鍧絀洪棿
璁$畻浠g爜澶у皬
DWORD cbCodeSize=((LPBYTE) AfterMyFunc - (LPBYTE) MyFunc);
鍒嗛厤浠g爜鍦板潃絀洪棿
PDWORD pCodeRemote = (PDWORD) VirtualAllocEx( hProcess, 0, cbCodeSize, MEM_COMMIT,

PAGE_EXECUTE_READWRITE );

姝ラ7錛氬啓鍐呭鍒扮洰鏍囪繘紼嬩腑鍒嗛厤鐨勪唬鐮佸湴鍧絀洪棿
WriteProcessMemory( hProcess, pCodeRemote, &MyFunc, cbCodeSize, NULL);

姝ラ8錛氬湪鐩爣榪涚▼涓墽琛屼唬鐮?/p>

HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0,
(LPTHREAD_START_ROUTINE) pCodeRemote,
pDataRemote, 0 , NULL);
DWORD h;
if (hThread)
{
::WaitForSingleObject( hThread, INFINITE );
::GetExitCodeThread( hThread, &h );
TRACE("run and return %d\n",h);
::CloseHandle( hThread );
}

榪欓噷鏈夊嚑涓煎緱璇存槑鐨勫湴鏂?
浣跨敤WaitForSingleObject絳夊緟綰跨▼緇撴潫;
浣跨敤GetExitCodeThread鑾峰緱榪斿洖鍊鹼紱
鏈鍚庡叧闂彞鏌凜loseHandle銆?/p>

姝ラ9錛氭竻鐞嗙幇鍦?/p>

閲婃斁絀洪棿
::VirtualFreeEx( hProcess, pCodeRemote,
                 cbCodeSize,MEM_RELEASE );

::VirtualFreeEx( hProcess, pDataRemote,
                 cbParamSize,MEM_RELEASE );

鍏抽棴榪涚▼鍙ユ焺
::CloseHandle( hProcess );

 

絎簩縐嶆柟寮?

絎簩縐嶆柟寮忥紝鎴戜滑浣跨敤鍔ㄦ佸簱鐨勫艦寮忋傚嵆鎴戜滑灝嗚嚜宸變竴涓姩鎬佸簱妞嶅叆鍒拌繙紼嬭繘紼嬩腑銆?/p>

榪欓噷涓嶅啀閲嶅涓婇潰鐩稿悓鐨勬楠?鍙啓鍑哄叾涓叧閿殑鍦版柟.
鍏抽敭1:
鍦ㄦ楠?涓皢鍔ㄦ佸簱鐨勮礬寰勪綔涓哄彉閲忎紶鍏ュ彉閲忕┖闂?
鍏抽敭2:
鍦ㄦ楠?涓?灝咷etProcAddress浣滀負(fù)鐩爣鎵ц鍑芥暟.

hThread = ::CreateRemoteThread( hProcess, NULL, 0,
            (LPTHREAD_START_ROUTINE )::GetProcAddress(
             hModule, "LoadLibraryA"),
             pDataRemote, 0, NULL );


鍙﹀鍦ㄦ楠?,娓呯悊鐜板満涓鍏堣鍏堣繘琛岄噴鏀炬垜浠殑鍔ㄦ佸簱.涔熷嵆綾諱技姝ラ8鎵ц鍑芥暟FreeLibrary

hThread = ::CreateRemoteThread( hProcess, NULL, 0,
(LPTHREAD_START_ROUTINE )::GetProcAddress(
hModule, "FreeLibrary"),
(void*)hLibModule, 0, NULL );

濂戒簡(jiǎn),闄愪簬綃囧箙涓嶈兘澶熶粙緇嶇殑寰堢粏,鍦ㄤ嬌鐢ㄨ繃紼嬩腑濡傛湁鐤戦棶鍙悜浣滆呭挩璇?錛堝紑鍙戠幆澧冿細(xì)windows2000/vc6.0錛?
 

 


鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/fangchao918628/archive/2008/08/30/2852744.aspx



]]>
#Pragma 鎸囦護(hù)浠嬬粛 http://www.shnenglu.com/road420/archive/2010/09/16/126736.html娣遍們鑰?/dc:creator>娣遍們鑰?/author>Thu, 16 Sep 2010 02:25:00 GMThttp://www.shnenglu.com/road420/archive/2010/09/16/126736.htmlhttp://www.shnenglu.com/road420/comments/126736.htmlhttp://www.shnenglu.com/road420/archive/2010/09/16/126736.html#Feedback0http://www.shnenglu.com/road420/comments/commentRss/126736.htmlhttp://www.shnenglu.com/road420/services/trackbacks/126736.html鍦ㄦ墍鏈夌殑棰勫鐞嗘寚浠や腑錛?Pragma 鎸囦護(hù)鍙兘鏄渶澶嶆潅鐨勪簡(jiǎn)錛屽畠鐨勪綔鐢ㄦ槸璁懼畾緙栬瘧鍣ㄧ殑鐘舵佹垨鑰呮槸鎸囩ず緙栬瘧鍣ㄥ畬鎴愪竴浜涚壒瀹氱殑鍔ㄤ綔銆?pragma鎸囦護(hù)瀵規(guī)瘡涓紪璇戝櫒緇欏嚭浜?jiǎn)涓涓柟娉?鍦ㄤ繚鎸佷笌C鍜孋 ++璇█瀹屽叏鍏煎鐨勬儏鍐典笅,緇欏嚭涓繪満鎴栨搷浣滅郴緇熶笓鏈夌殑鐗瑰緛銆備緷鎹畾涔?緙栬瘧鎸囩ず鏄満鍣ㄦ垨鎿嶄綔緋葷粺涓撴湁鐨?涓斿浜庢瘡涓紪璇戝櫒閮芥槸涓嶅悓鐨勩?/font>

鍏舵牸寮忎竴鑸負(fù): #Pragma Para
鍏朵腑Para 涓哄弬鏁幫紝涓嬮潰鏉ョ湅涓浜涘父鐢ㄧ殑鍙傛暟銆?/font>

(1)message 鍙傛暟銆?/font>

Message 鍙傛暟鏄垜鏈鍠滄鐨勪竴涓弬鏁幫紝瀹冭兘澶熷湪緙栬瘧淇℃伅杈撳嚭紿楀彛涓緭鍑虹浉搴旂殑淇℃伅錛岃繖瀵逛簬婧愪唬鐮佷俊鎭殑鎺у埗鏄潪甯擱噸瑕佺殑銆傚叾浣跨敤鏂規(guī)硶涓猴細(xì)
#Pragma message(“娑堟伅鏂囨湰”)
褰撶紪璇戝櫒閬囧埌榪欐潯鎸囦護(hù)鏃跺氨鍦ㄧ紪璇戣緭鍑虹獥鍙d腑灝嗘秷鎭枃鏈墦鍗板嚭鏉ャ?br>褰撴垜浠湪紼嬪簭涓畾涔変簡(jiǎn)璁稿瀹忔潵鎺у埗婧愪唬鐮佺増鏈殑鏃跺欙紝鎴戜滑鑷繁鏈夊彲鑳介兘浼?xì)蹇樿鏈夋病鏈夋纭殑璁揪|繖浜涘畯錛屾鏃舵垜浠彲浠ョ敤榪欐潯鎸囦護(hù)鍦ㄧ紪璇戠殑鏃跺欏氨榪涜媯(gè)鏌ャ?br>鍋囪鎴戜滑甯屾湜鍒ゆ柇鑷繁鏈夋病鏈夊湪婧愪唬鐮佺殑浠涔堝湴鏂瑰畾涔変簡(jiǎn)_X86榪欎釜瀹忓彲浠ョ敤涓嬮潰鐨勬柟娉?br>#ifdef _X86
#Pragma message(“_X86 macro activated!”)
#endif
褰撴垜浠畾涔変簡(jiǎn)_X86榪欎釜瀹忎互鍚庯紝搴旂敤紼嬪簭鍦ㄧ紪璇戞椂灝變細(xì)鍦ㄧ紪璇戣緭鍑虹獥鍙i噷鏄劇ず“_
X86 macro activated!”銆傛垜浠氨涓嶄細(xì)鍥犱負(fù)涓嶈寰楄嚜宸卞畾涔夌殑涓浜涚壒瀹氱殑瀹忚屾姄鑰蟲尃鑵簡(jiǎn)銆?/font>

(2)鍙︿竴涓嬌鐢ㄥ緱姣旇緝澶氱殑pragma鍙傛暟鏄痗ode_seg銆?/font>

鏍煎紡濡傦細(xì)
#pragma code_seg( ["section-name"[,"section-class"] ] )
瀹冭兘澶熻緗▼搴忎腑鍑芥暟浠g爜瀛樻斁鐨勪唬鐮佹錛屽綋鎴戜滑寮鍙戦┍鍔ㄧ▼搴忕殑鏃跺欏氨浼?xì)鋴社敤鍒板畠銆?/font>

(3)#pragma once (姣旇緝甯哥敤錛?/font>

鍙鍦ㄥご鏂囦歡鐨勬渶寮濮嬪姞鍏ヨ繖鏉℃寚浠ゅ氨鑳藉淇濊瘉澶存枃浠惰緙栬瘧涓嬈★紝榪欐潯鎸囦護(hù)瀹為檯涓婂湪VC6涓氨宸茬粡鏈変簡(jiǎn)錛屼絾鏄冭檻鍒板吋瀹規(guī)у茍娌℃湁澶鐨勪嬌鐢ㄥ畠銆?/font>

(4)#pragma hdrstop

琛ㄧず棰勭紪璇戝ご鏂囦歡鍒版涓烘錛屽悗闈㈢殑澶存枃浠朵笉榪涜棰勭紪璇戙侭CB鍙互棰勭紪璇戝ご鏂囦歡浠ュ姞蹇摼鎺ョ殑閫熷害錛屼絾濡傛灉鎵鏈夊ご鏂囦歡閮借繘琛岄緙栬瘧鍙堝彲鑳藉崰澶紓佺洏絀洪棿錛屾墍浠ヤ嬌鐢ㄨ繖涓夐」鎺掗櫎涓浜涘ご鏂囦歡銆?br>鏈夋椂鍗曞厓涔嬮棿鏈変緷璧栧叧緋伙紝姣斿鍗曞厓A渚濊禆鍗曞厓B錛屾墍浠ュ崟鍏傿瑕佸厛浜庡崟鍏傾緙栬瘧銆備綘鍙互鐢?pragma startup鎸囧畾緙栬瘧浼樺厛綰э紝濡傛灉浣跨敤浜?pragma package(smart_init) 錛孊CB灝變細(xì)鏍規(guī)嵁浼樺厛綰х殑澶у皬鍏堝悗緙栬瘧銆?/font>

(5)#pragma resource

#pragma resource "*.dfm"琛ㄧず鎶?.dfm鏂囦歡涓殑璧勬簮鍔犲叆宸ョ▼銆?.dfm涓寘鎷獥浣撳瑙傜殑瀹氫箟銆?/font>

(6)#pragma warning

#pragma warning( disable : 4507 34; once : 4385; error : 164 )
絳変環(huán)浜庯細(xì)
#pragma warning(disable:4507 34) // 涓嶆樉紺?507鍜?4鍙瘋鍛婁俊鎭?br>#pragma warning(once:4385) // 4385鍙瘋鍛婁俊鎭粎鎶ュ憡涓嬈?br>#pragma warning(error:164) // 鎶?64鍙瘋鍛婁俊鎭綔涓轟竴涓敊璇?br>鍚屾椂榪欎釜pragma warning 涔熸敮鎸佸涓嬫牸寮忥細(xì)
#pragma warning( push [ ,n ] )
#pragma warning( pop )
榪欓噷n浠h〃涓涓鍛婄瓑綰?1---4)銆?br>#pragma warning( push )淇濆瓨鎵鏈夎鍛婁俊鎭殑鐜版湁鐨勮鍛婄姸鎬併?br>#pragma warning( push, n)淇濆瓨鎵鏈夎鍛婁俊鎭殑鐜版湁鐨勮鍛婄姸鎬侊紝騫朵笖鎶婂叏灞璀﹀憡絳夌駭璁懼畾涓簄銆?br>#pragma warning( pop )鍚戞爤涓脊鍑烘渶鍚庝竴涓鍛婁俊鎭紝鍦ㄥ叆鏍堝拰鍑烘爤涔嬮棿鎵浣滅殑涓鍒囨敼鍔ㄥ彇娑堛備緥濡傦細(xì)
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )
鍦ㄨ繖孌典唬鐮佺殑鏈鍚庯紝閲嶆柊淇濆瓨鎵鏈夌殑璀﹀憡淇℃伅(鍖呮嫭4705錛?706鍜?707)銆?br>

錛?錛塸ragma comment(...)

璇ユ寚浠ゅ皢涓涓敞閲婅褰曟斁鍏ヤ竴涓璞℃枃浠舵垨鍙墽琛屾枃浠朵腑銆?br>甯哥敤鐨刲ib鍏抽敭瀛楋紝鍙互甯垜浠繛鍏ヤ竴涓簱鏂囦歡銆?br>

錛?錛塸rogma data_seg

鏈夌殑鏃跺欐垜浠彲鑳芥兂璁╀竴涓簲鐢ㄧ▼搴忓彧鍚姩涓嬈★紝灝卞儚鍗曚歡妯″紡(singleton)涓鏍鳳紝瀹炵幇鐨勬柟娉曞彲鑳芥湁澶氱錛岃繖閲岃璇寸敤#pragma data_seg鏉ュ疄鐜扮殑鏂規(guī)硶錛屽緢鏄畝媧佷究鍒┿?/font>

搴旂敤紼嬪簭鐨勫叆鍙f枃浠跺墠闈㈠姞涓?/font>

#pragma data_seg("flag_data")
int app_count = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:flag_data,RWS")

鐒跺悗紼嬪簭鍚姩鐨勫湴鏂瑰姞涓?/font>

if(app_count>0)     // 濡傛灉璁℃暟澶т簬0錛屽垯閫鍑哄簲鐢ㄧ▼搴忋?br>{
   //MessageBox(NULL, "宸茬粡鍚姩涓涓簲鐢ㄧ▼搴?, "Warning", MB_OK);

   //printf("no%d application", app_count);

   return FALSE;
}
app_count++;

Windows 鍦ㄤ竴涓猈in32紼嬪簭鐨勫湴鍧絀洪棿鍛ㄥ洿絳戜簡(jiǎn)涓閬撳銆傞氬父錛屼竴涓▼搴忕殑鍦板潃絀洪棿涓殑鏁版嵁鏄鏈夌殑錛屽鍒殑紼嬪簭鑰岃█鏄笉鍙鐨勩備絾鏄墽琛孲TRPROG鐨勫涓墽琛屽疄浣撹〃紺轟簡(jiǎn)STRLIB鍦ㄧ▼搴忕殑鎵鏈夋墽琛屽疄浣撲箣闂村叡浜暟鎹槸姣棤闂鐨勩傚綋鎮(zhèn)ㄥ湪涓涓猄TRPROG紿楀彛涓鍔犳垨鑰呭垹闄や竴涓瓧絎︿覆鏃訛紝榪欑鏀瑰彉灝嗙珛鍗沖弽鏄犲湪鍏跺畠鐨勭獥鍙d腑銆?/font>

鍦ㄥ叏閮ㄤ緥紼嬩箣闂達(dá)紝STRLIB鍏變韓涓や釜鍙橀噺錛氫竴涓瓧絎︽暟緇勫拰涓涓暣鏁幫紙璁板綍宸插偍瀛樼殑鏈夋晥瀛楃涓茬殑涓暟錛夈係TRLIB灝嗚繖涓や釜鍙橀噺鍌ㄥ瓨鍦ㄥ叡浜殑涓涓壒孌婂唴瀛樺尯孌典腑錛?/font>

#pragma      data_seg ("shared")
        
int                 iTotal = 0 ;
        
WCHAR               szStrings [MAX_STRINGS][MAX_LENGTH + 1] = { '\0' } ;
        
#pragma      data_seg ()
        

絎竴涓?pragma鍙欒堪寤虹珛鏁版嵁孌碉紝榪欓噷鍛藉悕涓簊hared銆傛?zhèn)ㄥ彲浠畣杩檶D靛懡鍚嶄負(fù)浠諱綍涓涓?zhèn)ㄥ枩娆㈢殑鍚嶅瓧銆傚湪榪欓噷鐨?pragma鍙欒堪涔嬪悗鐨勬墍鏈夊垵濮嬪寲浜?jiǎn)鐨勫彉閲忛兘鏀惧湪shared鏁版嵁孌典腑銆傜浜屼釜#pragma鍙欒堪鏍囩ず孌電殑緇撴潫銆傚鍙橀噺榪涜涓撻棬鐨勫垵濮嬪寲鏄緢閲嶈鐨勶紝鍚﹀垯緙栬瘧鍣ㄥ皢鎶婂畠浠斁鍦ㄦ櫘閫氱殑鏈垵濮嬪寲鏁版嵁孌典腑鑰屼笉鏄斁鍦╯hared涓?/font>

榪炵粨鍣ㄥ繀欏葷煡閬撴湁涓涓宻hared銆嶅叡浜暟鎹銆傚湪銆孭roject Settings銆嶅璇濇閫夋嫨銆孡ink銆嶉〉闈㈠嵎鏍囥傞変腑銆孲TRLIB銆嶆椂鍦ㄣ孭roject Options銆嶅瓧孌碉紙鍦≧elease鍜孌ebug璁懼畾涓潎鍙級(jí)錛屽寘鍚笅闈㈢殑榪炵粨鍙欒堪錛?/font>

/SECTION:shared,RWS
        

瀛楁瘝RWS琛ㄧず孌靛叿鏈夎銆佸啓鍜屽叡浜睘鎬с傛垨鑰咃紝鎮(zhèn)ㄤ篃鍙互鐩存帴鐢―LL鍘熷鐮佹寚瀹氳繛緇撻夐」錛屽氨鍍忔垜浠湪STRLIB.C閭f牱錛?/font>

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

鍏變韓鐨勫唴瀛樻鍏佽iTotal鍙橀噺鍜宻zStrings瀛楃涓叉暟緇勫湪STRLIB鐨勬墍鏈変緥紼嬩箣闂村叡浜傚洜涓篗AX_STRINGS絳変簬256錛岃?MAX_LENGTH絳変簬63錛屾墍浠ワ紝鍏變韓鍐呭瓨孌電殑闀垮害涓?2,772瀛楄妭錛峣Total鍙橀噺闇瑕?瀛楄妭錛?56涓寚閽堜腑鐨勬瘡涓涓兘闇瑕?28瀛楄妭銆?/font>



]]>
dll #pragma data_seg 瀹炵幇鏁版嵁鐨勫叡浜?http://www.shnenglu.com/road420/archive/2010/09/16/126737.html娣遍們鑰?/dc:creator>娣遍們鑰?/author>Thu, 16 Sep 2010 02:25:00 GMThttp://www.shnenglu.com/road420/archive/2010/09/16/126737.htmlhttp://www.shnenglu.com/road420/comments/126737.htmlhttp://www.shnenglu.com/road420/archive/2010/09/16/126737.html#Feedback0http://www.shnenglu.com/road420/comments/commentRss/126737.htmlhttp://www.shnenglu.com/road420/services/trackbacks/126737.html#pragma data_seg("flag_data")
   int count=0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:flag_data,RWS")
榪欑鏂規(guī)硶鍙兘鍦ㄦ病鏈塪ef鏂囦歡鏃朵嬌鐢紝濡傛灉閫氳繃def鏂囦歡榪涜瀵煎嚭鐨勮瘽錛岄偅涔堣緗氨瑕佸湪def鏂囦歡鍐呰緗屼笉鑳?br>鍦ㄤ唬鐮侀噷璁劇疆浜?jiǎn)銆?br>SETCTIONS
flag_data READ WRITE SHARED

 

鍦ㄤ富鏂囦歡涓紝鐢?pragma data_seg寤虹珛涓

涓柊鐨勬暟鎹騫跺畾涔夊叡浜暟鎹紝鍏跺叿浣撴牸寮忎負(fù)錛?

#pragma data_seg 錛?shareddata") //鍚嶇О鍙互

//鑷繁瀹氫箟錛屼絾蹇呴』涓庝笅闈㈢殑涓鑷淬?

HWND sharedwnd=NULL;//鍏變韓鏁版嵁

#pragma data_seg()



浠呭畾涔変竴涓暟鎹榪樹笉鑳借揪鍒板叡浜暟鎹殑鐩殑錛岃繕瑕佸憡璇夌紪璇戝櫒璇ユ鐨勫睘鎬э紝鏈変袱縐嶆柟娉曞彲浠ュ疄鐜拌鐩殑 錛堝叾鏁堟灉鏄浉鍚岀殑錛夛紝涓縐嶆柟娉曟槸鍦?DEF鏂囦歡涓姞鍏ュ涓嬭鍙ワ細(xì) SETCTIONS shareddata READ WRITE SHARED 鍙︿竴縐嶆柟娉曟槸鍦ㄩ」鐩緗摼鎺ラ夐」(Project Setting --銆塋ink)涓姞鍏ュ涓嬭鍙ワ細(xì) /SECTION:shareddata,rws

絎竴鐐癸細(xì)浠涔堟槸鍏變韓鏁版嵁孌碉紵涓轟粈涔堣鐢ㄥ叡浜暟鎹錛燂紵瀹冩湁浠涔堢敤閫旓紵錛?
鍦╓in16鐜涓紝DLL鐨勫叏灞鏁版嵁瀵規(guī)瘡涓澆鍏ュ畠鐨勮繘紼嬫潵璇撮兘鏄浉鍚岀殑錛涜屽湪Win32鐜涓紝鎯呭喌鍗村彂鐢熶簡(jiǎn)鍙樺寲錛孌LL鍑芥暟涓殑浠g爜鎵鍒涘緩鐨勪換浣曞璞★紙鍖呮嫭鍙橀噺錛夐兘褰掕皟鐢ㄥ畠鐨勭嚎紼嬫垨榪涚▼鎵鏈夈傚綋榪涚▼鍦ㄨ澆鍏LL鏃訛紝鎿嶄綔緋葷粺鑷姩鎶奃LL鍦板潃鏄犲皠鍒拌榪涚▼鐨勭鏈夌┖闂達(dá)紝涔熷氨鏄繘紼嬬殑铏氭嫙鍦板潃絀洪棿錛岃屼笖涔熷鍒惰DLL鐨勫叏灞鏁版嵁鐨勪竴浠芥嫹璐濆埌璇ヨ繘紼嬬┖闂淬備篃灝辨槸璇存瘡涓繘紼嬫墍鎷ユ湁鐨勭浉鍚岀殑DLL鐨勫叏灞鏁版嵁錛屽畠浠殑鍚嶇О鐩稿悓錛屼絾鍏跺煎嵈騫朵笉涓瀹氭槸鐩稿悓鐨勶紝鑰屼笖鏄簰涓嶅共娑夌殑銆?

鍥犳錛屽湪Win32鐜涓嬭鎯沖湪澶氫釜榪涚▼涓叡浜暟鎹紝灝卞繀欏昏繘琛屽繀瑕佺殑璁劇疆銆傚湪璁塊棶鍚屼竴涓狣ll鐨勫悇榪涚▼涔嬮棿鍏變韓瀛樺偍鍣ㄦ槸閫氳繃瀛樺偍鍣ㄦ槧灝勬枃浠舵妧鏈疄鐜扮殑銆備篃鍙互鎶婅繖浜涢渶瑕佸叡浜殑鏁版嵁鍒嗙鍑烘潵錛屾斁緗湪涓涓嫭绔嬬殑鏁版嵁孌甸噷錛屽茍鎶婅孌電殑灞炴ц緗負(fù)鍏變韓銆傚繀欏葷粰榪欎簺鍙橀噺璧嬪垵鍊鹼紝鍚﹀垯緙栬瘧鍣ㄤ細(xì)鎶婃病鏈夎祴鍒濆鍊肩殑鍙橀噺鏀懼湪涓涓彨鏈鍒濆鍖栫殑鏁版嵁孌典腑銆?



#pragma data_seg棰勫鐞嗘寚浠ょ敤浜庤緗叡浜暟鎹銆備緥濡傦細(xì)

#pragma data_seg("SharedDataName") HHOOK hHook=NULL; //蹇呴』鍦ㄥ畾涔夌殑鍚屾椂榪涜鍒濆鍖?!!!#pragma data_seg()

鍦?pragma data_seg("SharedDataName")鍜?pragma data_seg()涔嬮棿鐨勬墍鏈夊彉閲忓皢琚闂Dll鐨勬墍鏈夎繘紼嬬湅鍒板拰鍏變韓銆傚啀鍔犱笂涓鏉℃寚浠?pragma comment(linker,"/section:.SharedDataName,rws"),[娉ㄦ剰錛氭暟鎹妭鐨勫悕縐癷s case sensitive]閭d箞榪欎釜鏁版嵁鑺備腑鐨勬暟鎹彲浠ュ湪鎵鏈塂LL鐨勫疄渚嬩箣闂村叡浜傛墍鏈夊榪欎簺鏁版嵁鐨勬搷浣滈兘閽堝鍚屼竴涓疄渚嬬殑錛岃屼笉鏄湪姣忎釜榪涚▼鐨勫湴鍧絀洪棿涓兘鏈変竴浠姐?



褰撹繘紼嬮殣寮忔垨鏄懼紡璋冪敤涓涓姩鎬佸簱閲岀殑鍑芥暟鏃訛紝緋葷粺閮借鎶婅繖涓姩鎬佸簱鏄犲皠鍒拌繖涓繘紼嬬殑铏氭嫙鍦板潃絀洪棿閲?浠ヤ笅綆縐?鍦板潃絀洪棿")銆傝繖浣垮緱DLL鎴愪負(fù)榪涚▼鐨勪竴閮ㄥ垎錛屼互榪欎釜榪涚▼鐨勮韓浠芥墽琛岋紝浣跨敤榪欎釜榪涚▼鐨勫爢鏍堛?榪欓」鎶鏈張鍙玞ode Injection鎶鏈紝琚箍娉涘湴搴旂敤鍦ㄤ簡(jiǎn)鐥呮瘨銆侀粦瀹㈤鍩燂紒鍛靛懙^_^)



絎簩鐐癸細(xì)鍦ㄥ叿浣撲嬌鐢ㄥ叡浜暟鎹鏃墮渶瑕佹敞鎰忕殑涓浜涢棶棰橈紒

Win32 DLLs are mapped into the address space of the calling process. By default, each process using a DLL has its own instance of all the DLLs global and static variables. (娉ㄦ剰: 鍗充嬌鏄叏灞鍙橀噺鍜岄潤(rùn)鎬佸彉閲忎篃閮戒笉鏄叡浜殑!) If your DLL needs to share data with other instances of it loaded by other applications, you can use either of the following approaches:

· Create named data sections using the data_seg pragma.

· Use memory mapped files. See the Win32 documentation about memory mapped files.

Here is an example of using the data_seg pragma:

#pragma data_seg (".myseg")
int i = 0;
char a[32] = "hello world";
#pragma data_seg()

data_seg can be used to create a new named section (.myseg in this example). The most typical usage is to call the data segment .shared for clarity. You then must specify the correct sharing attributes for this new named data section in your .def file or with the linker option /SECTION:.MYSEC,RWS. (榪欎釜緙栬瘧鍙傛暟鏃㈠彲浠ヤ嬌鐢╬ragma鎸囦護(hù)鏉ユ寚瀹氾紝涔熷彲浠ュ湪VC鐨処DE涓寚瀹氾紒)

There are restrictions to consider before using a shared data segment:

· Any variables in a shared data segment must be statically initialized. In the above example, i is initialized to 0 and a is 32 characters initialized to hello world.

· All shared variables are placed in the compiled DLL in the specified data segment. Very large arrays can result in very large DLLs. This is true of all initialized global variables.

· Never store process-specific information in a shared data segment. Most Win32 data structures or values (such as HANDLEs) are really valid only within the context of a single process.

· Each process gets its own address space. It is very important that pointers are never stored in a variable contained in a shared data segment. A pointer might be perfectly valid in one application but not in another.

· It is possible that the DLL itself could get loaded at a different address in the virtual address spaces of each process. It is not safe to have pointers to functions in the DLL or to other shared variables.



]]>
RTTI銆佽櫄鍑芥暟鍜岃櫄鍩虹被鐨勫疄鐜版柟寮忋佸紑閿鍒嗘瀽鍙?qiáng)鋴社敤鎸囧?/title><link>http://www.shnenglu.com/road420/archive/2010/08/10/122954.html</link><dc:creator>娣遍們鑰?/dc:creator><author>娣遍們鑰?/author><pubDate>Tue, 10 Aug 2010 09:35:00 GMT</pubDate><guid>http://www.shnenglu.com/road420/archive/2010/08/10/122954.html</guid><wfw:comment>http://www.shnenglu.com/road420/comments/122954.html</wfw:comment><comments>http://www.shnenglu.com/road420/archive/2010/08/10/122954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/road420/comments/commentRss/122954.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/road420/services/trackbacks/122954.html</trackback:ping><description><![CDATA[<h1 align=center>RTTI銆佽櫄鍑芥暟鍜岃櫄鍩虹被鐨勫疄鐜版柟寮忋佸紑閿鍒嗘瀽鍙?qiáng)鋴社敤鎸囧?/h1> <p align=center><strong>鐧芥潹</strong></p> <p align=center><strong><a >http://baiy.cn</a></strong></p> <p>銆</p> <p>“鍦ㄦ紜殑鍦哄悎浣跨敤鎭板綋鐨勭壒鎬?#8221; 瀵圭О鑱岀殑C++紼嬪簭鍛樻潵璇存槸涓涓熀鏈爣鍑嗐傛兂瑕佸仛鍒拌繖鐐癸紝棣栧厛瑕佷簡(jiǎn)瑙h璦涓瘡涓壒鎬х殑瀹炵幇鏂瑰紡鍙?qiáng)鍏跺紑閿銆傛湰鏂囦富瑕佽璁虹浉瀵逛簬浼犵粺 C 鑰岃█錛屽鏁堢巼鏈夊獎(jiǎng)鍝嶇殑鍑犱釜C++鏂扮壒鎬с?/p> <p>鐩稿浜庝紶緇熺殑 C 璇█錛孋++ 寮曞叆鐨勯澶栧紑閿浣撶幇鍦ㄤ互涓嬩袱涓柟闈細(xì)</p> <h3>緙栬瘧鏃跺紑閿<br><img height=8 src="http://baiy.cn/doc/cpp/image/鍒嗗壊綰?1.png" width=733 border=0></h3> <div align=center> <table id=table3 style="BORDER-COLLAPSE: collapse" borderColorDark=#808080 cellPadding=4 width="95%" borderColorLight=#808080 border=0> <tbody> <tr> <td>妯℃澘銆佺被灞傛緇撴瀯銆佸己綾誨瀷媯(gè)鏌ョ瓑鏂扮壒鎬э紝浠ュ強(qiáng)澶ч噺浣跨敤浜?jiǎn)杩欎簺鏂扮壱?guī)х殑 STL 鏍囧噯搴撻兘澧炲姞浜?jiǎn)缂栬瘧鍣ㄨ礋鎷呫備絾鏄簲褰撶湅鍒幫紝榪欎簺鏂版満鑳藉湪涓嶉檷浣庯紝鐢氳嚦錛堢敱浜庢ā鏉跨殑鍐呰仈鑳藉姏錛夋彁鍗囦簡(jiǎn)紼嬪簭鎵ц鏁堢巼鐨勫墠鎻愪笅錛屾槑鏄懼噺杞諱簡(jiǎn)騫垮ぇ C++ 紼嬪簭鍛樼殑宸ヤ綔閲忋? <p>鐢ㄥ嚑縐掗挓鐨凜PU鏃墮棿鎹㈠彇鍑犱漢鏃ョ殑杈涘嫟鍔沖姩錛岄檮甯﹁妭鐪佷簡(jiǎn)鏃ュ悗璋冭瘯鍜岀淮鎶や唬鐮佺殑鏃墮棿錛岃繖鐐瑰紑閿褰撶畻瓚呭箋?/p> <p>褰撶劧錛屽湪浣跨敤榪欎簺鐗規(guī)х殑鏃跺欙紝涔熸湁涓嶅皯浼樺寲鎶宸с傛瘮濡傦細(xì)緙栬瘧涓涓?騫挎硾渚濊禆妯℃澘搴撶殑澶у瀷杞歡鏃訛紝鍑犳潯鏄懼紡瀹炰緥鍖栨寚浠ゅ氨鍙兘浣跨紪璇戦熷害鎻愰珮鍑犲崄鍊嶏紱鎭板綋鍦扮粍鍚堜嬌鐢ㄩ儴鍒嗕笓闂ㄥ寲鍜屽畬鍏ㄤ笓闂ㄥ寲錛屼笉浣嗗彲浠ユ渶浼樺寲紼嬪簭鐨勬墽琛屾晥鐜囷紝榪樺彲浠ヨ鍚屾椂浣跨敤澶氱涓嶅悓鍙傛暟瀹炰緥鍖栦竴濂楁ā鏉跨殑紼嬪簭浣撶Н鏄捐憲鍑忓皬……</p> </td> </tr> </tbody> </table> <p>銆</p> </div> <h3>榪愯鏃跺紑閿<br><img height=8 src="http://baiy.cn/doc/cpp/image/鍒嗗壊綰?1.png" width=733 border=0></h3> <div align=center> <table id=table4 style="BORDER-COLLAPSE: collapse" borderColorDark=#808080 cellPadding=4 width="95%" borderColorLight=#808080 border=0> <tbody> <tr> <td>榪愯鏃跺紑閿鎭愭曟槸紼嬪簭鍛樻渶鍏沖績(jī)鐨勯棶棰樹箣涓浜?jiǎn)銆傜浉瀵逛笌浼犵粺C紼嬪簭鑰岃█錛孋++涓湁鍙兘寮曞叆棰濆榪愯鏃跺紑閿鐨勬柊鐗規(guī)у寘鎷細(xì) <ol> <li>铏氬熀綾? <li>铏氬嚱鏁? <li>RTTI錛坉ynamic_cast鍜宼ypeid錛? <li>寮傚父 <li>瀵硅薄鐨勬瀯閫犲拰鏋愭瀯</li> </ol> <p>鍏充簬鍏朵腑絎洓鐐癸細(xì)寮傚父錛屽浜庡ぇ澶氭暟鐜頒唬緙栬瘧鍣ㄦ潵璇達(dá)紝鍦ㄦ甯告儏鍐碉紙鏈姏鍑哄紓甯革級(jí)涓嬶紝try鍧椾腑鐨勪唬鐮佹墽琛屾晥鐜囧拰鏅氫唬鐮佷竴鏍烽珮錛岃屼笖鐢變簬涓嶅啀闇瑕佷嬌鐢ㄤ紶緇熶笂閫氳繃榪斿洖鍊兼垨鍑芥暟璋冪敤鏉ュ垽鏂敊璇殑鏂瑰紡錛屼唬鐮佺殑瀹為檯鎵ц鏁堢巼榪樺彲鑳借繘涓姝ユ彁楂樸傛姏鍑哄拰鎹曟崏寮傚父鐨勬晥鐜囦篃鍙槸鍦ㄦ煇浜涙儏鍐典笅鎵嶄細(xì)紼嶄綆浜庡嚱鏁版甯歌繑鍥炵殑鏁堢巼錛屼綍鍐靛浜庝竴涓紪鍐欒壇濂界殑紼嬪簭錛屾姏鍑哄拰鎹曟崏寮傚父鐨勬満浼?xì)搴旇涓嶅銆傚叧浜庡紓甯鎬嬌鐢ㄧ殑璇︾粏璁ㄨ錛屽弬瑙侊細(xì)<a >C++緙栫爜瑙勮寖</a>姝f枃涓殑鐩稿叧閮ㄥ垎鍜?a >C++寮傚父鏈哄埗鐨勫疄鐜版柟寮忓拰寮閿鍒嗘瀽</a>涓鑺傘?/p> <p>鑰岀浜旂偣錛屽璞$殑鏋勯犲拰鏋愭瀯寮閿涔熶笉鎬繪槸瀛樺湪銆傚浜庝笉闇瑕佸垵濮嬪寲/閿姣佺殑綾誨瀷錛屽茍娌℃湁鏋勯犲拰鏋愭瀯鐨勫紑閿錛岀浉鍙嶅浜庨偅浜涢渶瑕佸垵濮嬪寲/閿姣佺殑綾誨瀷鏉ヨ錛屽嵆浣跨敤浼犵粺鐨凜鏂瑰紡瀹炵幇錛屼篃鑷沖皯闇瑕佷笌涔嬬浉褰撶殑寮閿銆傝繖閲岃娉ㄦ剰鐨勪竴鐐規(guī)槸灝介噺涓嶈璁╂瀯閫犲拰鏋愭瀯鍑芥暟榪囦簬鑷冭偪錛岀壒鍒槸鍦ㄤ竴涓被灞傛緇撴瀯涓洿瑕佹敞鎰忋傛椂鍒諱繚鎸佷綘鐨勬瀯閫犮佹瀽鏋勫嚱鏁頒腑鍙湁鏈蹇呰鐨勫垵濮嬪寲鍜岄攢姣佹搷浣滐紝鎶婇偅浜涘茍涓嶆槸姣忎釜錛堝瓙錛夊璞¢兘闇瑕佹墽琛岀殑鎿嶄綔鐣欑粰鍏朵粬鏂規(guī)硶鍜屾淳鐢熺被鍘昏В鍐熾?/p> <p>鍏跺疄瀵逛竴涓紭縐鐨勭紪璇戝櫒鑰岃█錛孋++鐨勫悇縐嶇壒鎬ф湰韜氨鏄嬌鐢–/姹囩紪鍔犱互鍗冮敜鐧劇偧鑰屾渶浼樺寲瀹炵幇鐨勩傚彲浠ヨ錛屾兂鐢–鐢氳嚦姹囩紪姣旂紪璇戝櫒鏇撮珮鏁堝湴瀹炵幇鏌愪釜C++鐗規(guī)у嚑涔庢槸涓嶅彲鑳界殑銆傝鏄湡鑳藉仛鍒拌繖涓鐐圭殑璇濓紝澶т緺灝卞簲璇ュ幓鍐欎釜緙栬瘧鍣ㄩ犵騫垮ぇ紼嬪簭鍛樻墠瀵癸綖</p> <p>C++涔嬫墍浠?琚箍娉涜涓烘瘮C“浣庢晥”錛屽叾鏍規(guī)湰鍘熷洜鍦ㄤ簬錛氱敱浜庣▼搴忓憳瀵規(guī)煇浜涚壒鎬х殑瀹炵幇鏂瑰紡鍙?qiáng)鍏朵骇鐢熺殑寮閿涓嶅浜?jiǎn)瑙eQ岃嚧浣夸粬浠湪閿欒鐨勫満鍚堜嬌鐢ㄤ簡(jiǎn)閿欒鐨勭壒鎬с傝岃繖浜涢敊璇熀鏈兘闆嗕腑鍦細(xì)</p> <ul> <li>鎶婂紓甯稿綋浣滃彟涓縐嶆祦鎺ф満鍒訛紝鑰屼笉鏄粎灝嗗叾鐢ㄤ簬閿欒澶勭悊涓? <li>涓涓被鍜?鎴栧叾鍩虹被鐨勬瀯閫犮佹瀽鏋勫嚱鏁拌繃浜庤噧鑲匡紝鍖呭惈浜?jiǎn)寰堝闈炲垵濮嬪?閿姣佽寖鐣寸殑浠g爜 <li>婊ョ敤鎴栦笉姝g‘鍦頒嬌鐢≧TTI銆佽櫄鍑芥暟鍜岃櫄鍩虹被鏈哄埗</li> </ul> <p>鍏朵腑鍓嶄袱鐐逛笂鏂囧凡緇忚榪囷紝涓嬮潰璁ㄨ絎笁鐐廣?/p> <p>涓轟簡(jiǎn)璇存槑RTTI銆佽櫄鍑芥暟鍜岃櫄鍩虹被鐨勫疄鐜版柟寮忥紝榪欓噷棣栧厛緇欏嚭涓涓粡鍏哥殑鑿卞艦緇ф壙瀹炰緥錛屽強(qiáng)鍏跺叿浣撳疄鐜幫紙涓轟簡(jiǎn)渚夸簬鐞嗚В錛岃繖閲屾晠鎰忓拷鐣ヤ簡(jiǎn)涓浜涙棤鍏崇揣瑕佺殑浼樺寲錛夛細(xì)</p> </td> </tr> </tbody> </table> </div> <p align=center><img height=897 src="http://baiy.cn/doc/cpp/image/閽葷煶鍨嬬戶鎵跨殑鍏稿瀷鍐呭瓨甯冨眬.png" width=1030 border=0><br>鍥句腑铏氱澶翠唬琛ㄥ亸縐伙紝瀹炵澶翠唬琛ㄦ寚閽?/p> <div align=center> <table id=table5 style="BORDER-COLLAPSE: collapse" borderColorDark=#808080 cellPadding=4 width="95%" borderColorLight=#808080 border=0> <tbody> <tr> <td>鐢變笂鍥懼緱鍒版瘡縐嶇壒鎬х殑榪愯鏃跺紑閿濡備笅錛? <div align=center>銆 <table id=table6 style="BORDER-COLLAPSE: collapse" borderColorDark=#808080 cellPadding=4 width="95%" borderColorLight=#808080 border=1> <tbody> <tr> <td vAlign=top align=left width=143 bgColor=#c0c0c0><strong>鐗規(guī)?/strong></td> <td vAlign=top align=left width=332 bgColor=#c0c0c0><strong>鏃墮棿寮閿</strong></td> <td vAlign=top align=left bgColor=#c0c0c0><strong>絀洪棿寮閿</strong></td> </tr> <tr> <td vAlign=top align=left width=143>RTTI</td> <td vAlign=top align=left width=332>鍑犳鏁村艦姣旇緝鍜屼竴嬈″彇鍧鎿嶄綔錛堝彲鑳借繕浼?xì)鏈?銆?嬈℃暣褰㈠姞娉曪級(jí)</td> <td vAlign=top align=left><u>姣忕被鍨?/u>涓涓猼ype_info瀵硅薄錛堝寘鎷被鍨婭D鍜岀被鍚嶇О錛夛紝鍏稿瀷鎯呭喌涓嬪皬浜?2瀛楄妭 <p>銆</p> </td> </tr> <tr> <td vAlign=top align=left width=143>铏氬嚱鏁?/td> <td vAlign=top align=left width=332>涓嬈℃暣褰㈠姞娉曞拰涓嬈℃寚閽堥棿鎺ュ紩鐢?/td> <td vAlign=top align=left><u>姣忕被鍨?/u>涓涓櫄琛紝鍏稿瀷鎯呭喌涓嬪皬浜?28瀛楄妭 <p><u>姣忓璞?/u>鑻ュ共涓紙澶ч儴鍒嗘儏鍐典笅鏄竴涓級(jí)铏氳〃鎸囬拡錛屽吀鍨嬫儏鍐典笅灝忎簬8瀛楄妭 <p>銆</p> </td> </tr> <tr> <td vAlign=top align=left width=143>铏氬熀綾?/td> <td vAlign=top align=left width=332>浠庤櫄緇ф壙鐨勫瓙綾諱腑璁塊棶<u>铏氬熀綾葷殑鏁版嵁鎴愬憳鎴栧叾铏氬嚱鏁?/u>鏃訛紝灝嗗鍔犱袱嬈℃寚閽堥棿鎺ュ紩鐢ㄥ拰涓嬈℃暣褰㈠姞娉曪紙閮ㄥ垎鎯呭喌涓嬪彲浠ヤ紭鍖栦負(fù)涓嬈℃寚閽堥棿鎺ュ紩鐢級(jí)銆?/td> <td vAlign=top align=left><u>姣忕被鍨?/u>涓涓櫄鍩虹被琛紝鍏稿瀷鎯呭喌涓嬪皬浜?2瀛楄妭 <p><u>姣忓璞?/u>鑻ュ共铏氬熀綾昏〃鎸囬拡錛屽吀鍨嬫儏鍐典笅灝忎簬8瀛楄妭 <p>鍦ㄥ悓鏃朵嬌鐢ㄤ簡(jiǎn)铏氬嚱鏁扮殑鏃跺欙紝<strong>铏氬熀綾昏〃鍙互鍚堝茍鍒拌櫄琛紙virtual table錛変腑</strong>錛屾瘡瀵硅薄鐨勮櫄鍩虹被琛ㄦ寚閽堬紙vbptr錛変篃鍙互鐪佺暐錛堝彧闇vptr鍗沖彲錛夈傚疄闄呬笂錛?寰堝瀹炵幇閮芥槸榪欎箞鍋氱殑銆? <p>銆</p> </td> </tr> <tr> <td vAlign=top align=left colSpan=3> * 鍏朵腑“姣忕被鍨?#8221;鎴?#8220;姣忓璞?#8221;鏄寚鐢ㄥ埌璇ョ壒鎬х殑綾誨瀷/瀵硅薄銆傚浜庢湭鐢ㄥ埌榪欎簺鍔熻兘鐨勭被鍨嬪強(qiáng)鍏跺璞★紝鍒欎笉浼?xì)澧炲姞涓姌q板紑閿</td> </tr> </tbody> </table> </div> <p>鍙錛屽叧浜庤佸ぉ“楗挎椂鎺夐楗箋佺潯鏃舵帀鑰佸﹩”絳夌編濂戒紶璇寸函灞炶埃璦銆備絾鍑′漢宸ュ埗鍝佸繀涓嶅畬緹庯紝鎬繪湁璁捐涓婄殑鍙栬垗錛屾湁鍏墮傚簲鐨勫満鍚堜篃鏈夊叾涓嶉傜敤鐨勫湴鏂廣?/p> <p>C++涓殑姣忎釜鐗規(guī)э紝閮芥槸浠庣▼搴忓憳騫蟲椂鐨勭敓浜х敓媧諱腑閫愭笎綺懼寲鑰屾潵鐨勩傚湪涓嶆紜殑鍦哄悎浣跨敤瀹冧滑蹇呯劧浼?xì)寮曡捣閫昏緫銆佽涓哄拰鎬ц兘涓婄殑闂銆傚浜庝笂榪扮壒鎬э紝搴旇鍙湪蹇呰銆佸悎鐞嗙殑鍓嶆彁涓嬫墠浣跨敤銆?/p> <p>"<strong>dynamic_cast</strong>" 鐢ㄤ簬鍦ㄧ被灞傛緇撴瀯涓極娓革紝瀵規(guī)寚閽堟垨寮曠敤榪涜鑷敱鐨勫悜涓娿佸悜涓嬫垨浜ゅ弶寮哄埗銆?<strong>typeid</strong>" 鍒欑敤浜庤幏鍙栦竴涓璞℃垨寮曠敤鐨勭‘鍒囩被鍨嬶紝涓?"dynamic_cast" 涓嶅悓錛屽皢 "typeid" 浣滅敤浜庢寚閽堥氬父鏄竴涓敊璇紝瑕佸緱鍒頒竴涓寚閽堟寚鍚戜箣瀵硅薄鐨則ype_info錛屽簲褰撳厛灝嗗叾瑙e紩鐢紙渚嬪錛?typeid(*p);"錛夈?/p> <p>涓鑸湴璁詫紝鑳界敤铏氬嚱鏁拌В鍐崇殑闂灝變笉瑕佺敤 "dynamic_cast"錛岃兘澶熺敤 "dynamic_cast" 瑙e喅鐨勫氨涓嶈鐢?"typeid"銆傛瘮濡傦細(xì)</p> <div align=center> <table id=table7 style="BORDER-COLLAPSE: collapse" borderColorDark=#808080 cellPadding=4 width="95%" borderColorLight=#808080 border=0> <tbody> <tr> <td style="LINE-HEIGHT: 100%" bgColor=#ebebeb><font face=Fixedsys color=#800000><img height=46 src="http://baiy.cn/doc/cpp/image/鍙嶉潰鏁欐潗.png" width=138 border=0><br><br></font><font face=Fixedsys color=#0000ff>void</font><font face=Fixedsys color=#800000><br>rotate(</font><font face=Fixedsys color=#ff8000>IN</font><font face=Fixedsys color=#800000> </font><font face=Fixedsys color=#0000ff>const</font><font face=Fixedsys color=#800000> </font><font face=Fixedsys color=#0000ff>CShape</font><font face=Fixedsys color=#800000>& </font><font face=Fixedsys color=#808080>iS</font><font face=Fixedsys color=#800000>)<br>{<br>    </font><font face=Fixedsys color=#0000ff>if</font><font face=Fixedsys color=#800000> (</font><font face=Fixedsys color=#0000ff>typeid</font><font face=Fixedsys color=#800000>(</font><font face=Fixedsys color=#808080>iS</font><font face=Fixedsys color=#800000>) == </font><font face=Fixedsys color=#0000ff>typeid</font><font face=Fixedsys color=#800000>(</font><font face=Fixedsys color=#0000ff>CCircle</font><font face=Fixedsys color=#800000>))<br>    {<br>        </font><font face=Fixedsys color=#008000>// ...</font><font face=Fixedsys color=#800000><br>    }<br>    </font><font face=Fixedsys color=#0000ff>else</font><font face=Fixedsys color=#800000> </font><font face=Fixedsys color=#0000ff>if</font><font face=Fixedsys color=#800000> (</font><font face=Fixedsys color=#0000ff>typeid</font><font face=Fixedsys color=#800000>(</font><font face=Fixedsys color=#808080>iS</font><font face=Fixedsys color=#800000>) == </font><font face=Fixedsys color=#0000ff>typeid</font><font face=Fixedsys color=#800000>(</font><font face=Fixedsys color=#0000ff>CTriangle</font><font face=Fixedsys color=#800000>))<br>    {<br>        </font><font face=Fixedsys color=#008000>// ...</font><font face=Fixedsys color=#800000><br>    }<br>    </font><font face=Fixedsys color=#0000ff>else</font><font face=Fixedsys color=#800000> </font><font face=Fixedsys color=#0000ff>if</font><font face=Fixedsys color=#800000> (</font><font face=Fixedsys color=#0000ff>typeid</font><font face=Fixedsys color=#800000>(</font><font face=Fixedsys color=#808080>iS</font><font face=Fixedsys color=#800000>) == </font><font face=Fixedsys color=#0000ff>typeid</font><font face=Fixedsys color=#800000>(</font><font face=Fixedsys color=#0000ff>CSqucre</font><font face=Fixedsys color=#800000>))<br>    {<br>        </font><font face=Fixedsys color=#008000>// ...</font><font face=Fixedsys color=#800000><br>    }<br><br>    </font><font face=Fixedsys color=#008000>// ...</font><font face=Fixedsys color=#800000><br>}</font></td> </tr> </tbody> </table> <p align=left>浠ヤ笂浠g爜鐢?"dynamic_cast" 鍐欎細(xì)紼嶅ソ涓鐐癸紝褰撶劧鏈濂界殑鏂瑰紡榪樻槸鍦–Shape閲屽畾涔夊悕涓?"rotate" 鐨勮櫄鍑芥暟銆?/p> </div> <p>铏氬嚱鏁版槸C++浼楀榪愯鏃跺鎬佺壒鎬т腑寮閿鏈灝忥紝涔熸渶甯哥敤鐨勬満鍒躲傝櫄鍑芥暟鐨勫ソ澶勫拰浣滅敤榪欓噷涓嶅啀澶氳錛屽簲褰撴敞鎰忓湪瀵規(guī)ц兘鏈夎嫑鍒昏姹傜殑鍦哄悎錛屾垨鑰呴渶瑕侀綣佽皟鐢紝瀵規(guī)ц兘褰卞搷杈冨ぇ鐨勫湴鏂癸紙姣斿姣忕閽熻璋冪敤鎴愬崈涓婁竾嬈★紝鑰岃嚜韜唴瀹瑰張寰堢畝鍗曠殑浜嬩歡澶勭悊鍑芥暟錛夎鎱庣敤铏氬嚱鏁般?/p> <p>闇瑕佺壒鍒鏄庣殑涓鐐規(guī)槸錛氳櫄鍑芥暟鐨勮皟鐢ㄥ紑閿涓庨氳繃鍑芥暟鎸囬拡鐨勯棿鎺ュ嚱鏁拌皟鐢紙渚嬪錛氱粡鍏窩紼嬪簭涓父瑙佺殑錛岄氳繃鎸囧悜緇撴瀯涓殑涓涓嚱鏁版寚閽堟垚鍛樿皟鐢紱浠ュ強(qiáng)璋冪敤DLL/SO涓殑鍑芥暟絳夊父瑙佹儏鍐碉級(jí)鏄浉褰撶殑銆傛瘮璧峰嚱鏁拌皟鐢ㄦ湰韜殑寮閿錛堜繚瀛樼幇鍦?>浼犻掑弬鏁?>浼犻掕繑鍥炲?>鎭㈠鐜板満錛夋潵璇達(dá)紝涓嬈℃寚閽堥棿鎺ュ紩鐢ㄦ槸寰笉瓚抽亾鐨勩傝繖灝變嬌寰?strong>鍦ㄧ粷澶ч儴鍒嗗彲浠ヤ嬌鐢ㄥ嚱鏁扮殑鍦哄悎涓兘鑳藉璐熸媴寰楄搗铏氭柟娉?/strong>鐨勪簺寰澶栧紑閿銆?/p> <p>浣滀負(fù)涓縐嶆敮鎸佸緇ф壙鐨勯潰鍚戝璞¤璦錛岃櫄鍩虹被鏈夋椂鏄繚璇佺被灞傛緇撴瀯姝g‘涓鑷寸殑涓縐嶅繀涓嶅彲灝戠殑鎵嬫銆備絾鍦ㄩ渶瑕侀綣佷嬌鐢ㄥ熀綾繪彁渚涚殑鏈嶅姟錛屽張瀵規(guī)ц兘瑕佹眰杈冮珮鐨勫満鍚堬紝搴旇灝介噺閬垮厤浣跨敤瀹冦傚湪鍩虹被涓病鏈夋暟鎹垚鍛樼殑鍦哄悎錛屼篃鍙互瑙i櫎浣跨敤铏氬熀綾匯備緥濡傦紝鍦ㄤ笂鍥句腑錛屽鏋滅被 "BB" 涓笉瀛樺湪鏁版嵁鎴愬憳錛岄偅涔?"BB" 灝卞彲浠ヤ綔涓轟竴涓櫘閫氬熀綾誨垎鍒 "B1" 鍜?"B2" 緇ф壙銆傝繖鏍風(fēng)殑浼樺寲鍦ㄨ揪鍒扮浉鍚屾晥鏋滅殑鍓嶆彁涓嬶紝瑙i櫎浜?jiǎn)铏氬熀绫诲紩钃v鐨勫紑閿銆備笉榪囪繖縐嶄紭鍖栦篃浼?xì)甯︽潵涓浜涢棶棰橈細(xì)浠?"DD" 鍚戜笂寮哄埗鍒?"BB" 鏃朵細(xì)寮曡搗姝т箟錛岀牬鍧忎簡(jiǎn)綾誨眰嬈$粨鏋勭殑閫昏緫鍏崇郴銆?/p> <p>涓婅堪鐗規(guī)х殑絀洪棿寮閿涓鑸兘鏄彲浠ユ帴鍙楃殑錛屽綋鐒朵篃瀛樺湪涓浜涚壒渚嬶紝姣斿錛氬湪瀛樺偍甯冨眬闇瑕佸拰浼犵粺C緇撴瀯鍏煎鐨勫満鍚堛佸湪鑰冭檻瀵歸綈鐨勫満鍚堛佸湪闇瑕佷負(fù)涓涓湰鏉ュ昂瀵稿緢灝忕殑綾誨悓鏃跺疄渚嬪寲璁稿瀵硅薄鐨勫満鍚堢瓑絳夈?/p> </td> </tr> </tbody> </table> </div> <img src ="http://www.shnenglu.com/road420/aggbug/122954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/road420/" target="_blank">娣遍們鑰?/a> 2010-08-10 17:35 <a href="http://www.shnenglu.com/road420/archive/2010/08/10/122954.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Debug 鍜? Release http://www.shnenglu.com/road420/archive/2009/11/21/101580.html娣遍們鑰?/dc:creator>娣遍們鑰?/author>Sat, 21 Nov 2009 14:39:00 GMThttp://www.shnenglu.com/road420/archive/2009/11/21/101580.htmlhttp://www.shnenglu.com/road420/comments/101580.htmlhttp://www.shnenglu.com/road420/archive/2009/11/21/101580.html#Feedback0http://www.shnenglu.com/road420/comments/commentRss/101580.htmlhttp://www.shnenglu.com/road420/services/trackbacks/101580.html

涓銆丏ebug  鍜? Release  緙栬瘧鏂瑰紡鐨勬湰璐ㄥ尯鍒? 

Debug  閫氬父縐頒負(fù)璋冭瘯鐗堟湰錛屽畠鍖呭惈璋冭瘯淇℃伅錛屽茍涓斾笉浣滀換浣曚紭鍖栵紝渚夸簬紼嬪簭鍛樿皟璇曠▼搴忋俁elease  縐頒負(fù)鍙戝竷鐗堟湰錛屽畠寰寰鏄繘琛屼簡(jiǎn)鍚勭浼樺寲錛屼嬌寰楃▼搴忓湪浠g爜澶у皬鍜岃繍琛岄熷害涓婇兘鏄渶浼樼殑錛屼互渚跨敤鎴峰緢濂藉湴浣跨敤銆? 
Debug  鍜? Release  鐨勭湡姝g瀵嗭紝鍦ㄤ簬涓緇勭紪璇戦夐」銆備笅闈㈠垪鍑轟簡(jiǎn)鍒嗗埆閽堝浜岃呯殑閫夐」錛堝綋鐒墮櫎姝や箣澶栬繕鏈夊叾浠栦竴浜涳紝濡?Fd  /Fo錛屼絾鍖哄埆騫朵笉閲嶈錛岄氬父浠栦滑涔熶笉浼?xì)寮曡? Release  鐗堥敊璇紝鍦ㄦ涓嶈璁猴級(jí)  

Debug  鐗堟湰錛? 
/MDd  /MLd  鎴? /MTd  浣跨敤  Debug  runtime  library(璋冭瘯鐗堟湰鐨勮繍琛屾椂鍒誨嚱鏁板簱)  
/Od  鍏抽棴浼樺寲寮鍏? 
/D  &quot;_DEBUG&quot;  鐩稿綋浜? #define  _DEBUG,鎵撳紑緙栬瘧璋冭瘯浠g爜寮鍏?涓昏閽堝  
assert鍑芥暟)  
/ZI  鍒涘緩  Edit  and  continue(緙栬緫緇х畫)鏁版嵁搴擄紝榪欐牱鍦ㄨ皟璇曡繃  
紼嬩腑濡傛灉淇敼浜?jiǎn)婧愪唬鐮佷笉闇閲嶆柊緙栬瘧  
/GZ  鍙互甯姪鎹曡幏鍐呭瓨閿欒  
/Gm  鎵撳紑鏈灝忓寲閲嶉摼鎺ュ紑鍏籌紝鍑忓皯閾炬帴鏃墮棿  

Release  鐗堟湰錛?   
/MD  /ML  鎴? /MT  浣跨敤鍙戝竷鐗堟湰鐨勮繍琛屾椂鍒誨嚱鏁板簱  
/O1  鎴? /O2  浼樺寲寮鍏籌紝浣跨▼搴忔渶灝忔垨鏈蹇? 
/D  &quot;NDEBUG&quot;  鍏抽棴鏉′歡緙栬瘧璋冭瘯浠g爜寮鍏?鍗充笉緙栬瘧assert鍑芥暟)  
/GF  鍚堝茍閲嶅鐨勫瓧絎︿覆錛屽茍灝嗗瓧絎︿覆甯擱噺鏀懼埌鍙鍐呭瓨錛岄槻姝? 
琚慨鏀? 

瀹為檯涓婏紝Debug  鍜? Release  騫舵病鏈夋湰璐ㄧ殑鐣岄檺錛屼粬浠彧鏄竴緇勭紪璇戦夐」鐨勯泦鍚堬紝緙栬瘧鍣ㄥ彧鏄寜鐓ч瀹氱殑閫夐」琛屽姩銆備簨瀹炰笂錛屾垜浠敋鑷沖彲浠ヤ慨鏀硅繖浜涢夐」錛屼粠鑰屽緱鍒頒紭鍖栬繃鐨勮皟璇曠増鏈垨鏄甫璺熻釜璇彞鐨勫彂甯冪増鏈? 

浜屻佸摢浜涙儏鍐典笅  Release  鐗堜細(xì)鍑洪敊  

鏈変簡(jiǎn)涓婇潰鐨勪粙緇嶏紝鎴戜滑鍐嶆潵閫愪釜瀵圭収榪欎簺閫夐」鐪嬬湅  Release  鐗堥敊璇槸鎬庢牱浜х敓鐨? 

1.  Runtime  Library錛氶摼鎺ュ摢縐嶈繍琛屾椂鍒誨嚱鏁板簱閫氬父鍙紼嬪簭鐨勬ц兘浜х敓褰卞搷銆傝皟璇曠増鏈殑  Runtime  Library  鍖呭惈浜?jiǎn)璋冭瘯淇℃伅锛岒q墮噰鐢ㄤ簡(jiǎn)涓浜涗繚鎶ゆ満鍒朵互甯姪鍙戠幇閿欒錛屽洜姝ゆц兘涓嶅鍙戝竷鐗堟湰銆傜紪璇戝櫒鎻愪緵鐨? Runtime  Library  閫氬父寰堢ǔ瀹氾紝涓嶄細(xì)閫犳垚  Release  鐗堥敊璇紱鍊掓槸鐢變簬  Debug  鐨? Runtime  Library  鍔犲己浜?jiǎn)瀵归敊璇殑妫嫻嬶紝濡傚爢鍐呭瓨鍒嗛厤錛屾湁鏃朵細(xì)鍑虹幇  Debug  鏈夐敊浣? Release  姝e父鐨勭幇璞°傚簲褰撴寚鍑虹殑鏄紝濡傛灉  Debug  鏈夐敊錛屽嵆浣? Release  姝e父錛岀▼搴忚偗瀹氭槸鏈? Bug  鐨勶紝鍙笉榪囧彲鑳芥槸  Release  鐗堢殑鏌愭榪愯娌℃湁琛ㄧ幇鍑烘潵鑰屽凡銆? 

2.  浼樺寲錛氳繖鏄犳垚閿欒鐨勪富瑕佸師鍥狅紝鍥犱負(fù)鍏抽棴浼樺寲鏃舵簮紼嬪簭鍩烘湰涓婃槸鐩存帴緲昏瘧鐨勶紝鑰屾墦寮浼樺寲鍚庣紪璇戝櫒浼?xì)浣滃囖Z竴緋誨垪鍋囪銆傝繖綾婚敊璇富瑕佹湁浠ヤ笅鍑犵錛? 

(1)  甯ф寚閽?Frame  Pointer)鐪佺暐錛堢畝縐? FPO  錛夛細(xì)鍦ㄥ嚱鏁拌皟鐢ㄨ繃紼嬩腑錛屾墍鏈夎皟鐢ㄤ俊鎭紙榪斿洖鍦板潃銆佸弬鏁幫級(jí)浠ュ強(qiáng)鑷姩鍙橀噺閮芥槸鏀懼湪鏍堜腑鐨勩傝嫢鍑芥暟鐨勫0鏄庝笌瀹炵幇涓嶅悓錛堝弬鏁般佽繑鍥炲箋佽皟鐢ㄦ柟寮忥級(jí)錛屽氨浼?xì)漶旂敓閿欒鈥斺斺斺斾絾  Debug  鏂瑰紡涓嬶紝鏍堢殑璁塊棶閫氳繃  EBP  瀵勫瓨鍣ㄤ繚瀛樼殑鍦板潃瀹炵幇錛屽鏋滄病鏈夊彂鐢熸暟緇勮秺鐣屼箣綾葷殑閿欒錛堟垨鏄秺鐣?#8220;涓嶅”錛夛紝鍑芥暟閫氬父鑳芥甯告墽琛岋紱Release  鏂瑰紡涓嬶紝浼樺寲浼?xì)鐪佺? EBP  鏍堝熀鍧鎸囬拡錛岃繖鏍烽氳繃涓涓叏灞鎸囬拡璁塊棶鏍堝氨浼?xì)閫犳垚榪斿洖鍦板潃閿欒鏄▼搴忓穿婧冦侰++  鐨勫己綾誨瀷鐗規(guī)ц兘媯(gè)鏌ュ嚭澶у鏁拌繖鏍風(fēng)殑閿欒錛屼絾濡傛灉鐢ㄤ簡(jiǎn)寮哄埗綾誨瀷杞崲錛屽氨涓嶈浜?jiǎn)銆備綘鍙互鍦? Release  鐗堟湰涓己鍒跺姞鍏? /Oy-  緙栬瘧閫夐」鏉ュ叧鎺夊撫鎸囬拡鐪佺暐錛屼互紜畾鏄惁姝ょ被閿欒銆傛綾婚敊璇氬父鏈夛細(xì)  

鈼? MFC  娑堟伅鍝嶅簲鍑芥暟涔﹀啓閿欒銆傛紜殑搴斾負(fù)  
afx_msg  LRESULT  OnMessageOwn(WPARAM  wparam,  LPARAM  lparam);  
ON_MESSAGE  瀹忓寘鍚己鍒剁被鍨嬭漿鎹€傞槻姝㈣繖縐嶉敊璇殑鏂規(guī)硶涔嬩竴鏄噸瀹氫箟  ON_MESSAGE  瀹忥紝鎶婁笅鍒椾唬鐮佸姞鍒? stdafx.h  涓紙鍦?include  &quot;afxwin.h&quot;涔嬪悗錛?鍑芥暟鍘熷艦閿欒鏃剁紪璇戜細(xì)鎶ラ敊  
#undef  ON_MESSAGE  
#define  ON_MESSAGE(message,  memberFxn)  \  
{  message,  0,  0,  0,  AfxSig_lwl,  \  
(AFX_PMSG)(AFX_PMSGW)(static_cast&lt;  LRESULT  (AFX_MSG_CALL  \  
CWnd::*)(WPARAM,  LPARAM)  &gt;  (&memberFxn)  },  

(2)  volatile  鍨嬪彉閲忥細(xì)volatile  鍛婅瘔緙栬瘧鍣ㄨ鍙橀噺鍙兘琚▼搴忎箣澶栫殑鏈煡鏂瑰紡淇敼錛堝緋葷粺銆佸叾浠栬繘紼嬪拰綰跨▼錛夈備紭鍖栫▼搴忎負(fù)浜?jiǎn)鋴山E嬪簭鎬ц兘鎻愰珮錛屽父鎶婁竴浜涘彉閲忔斁鍦ㄥ瘎瀛樺櫒涓紙綾諱技浜? register  鍏抽敭瀛楋級(jí)錛岃屽叾浠栬繘紼嬪彧鑳藉璇ュ彉閲忔墍鍦ㄧ殑鍐呭瓨榪涜淇敼錛岃屽瘎瀛樺櫒涓殑鍊兼病鍙樸傚鏋滀綘鐨勭▼搴忔槸澶氱嚎紼嬬殑錛屾垨鑰呬綘鍙戠幇鏌愪釜鍙橀噺鐨勫間笌棰勬湡鐨勪笉絎﹁屼綘紜俊宸叉紜殑璁劇疆浜?jiǎn)锛屽垯寰堝彲鑳介亣鍒皹q欐牱鐨勯棶棰樸傝繖縐嶉敊璇湁鏃朵細(xì)琛ㄧ幇涓虹▼搴忓湪鏈蹇紭鍖栧嚭閿欒屾渶灝忎紭鍖栨甯搞傛妸浣犺涓哄彲鐤戠殑鍙橀噺鍔犱笂  volatile  璇曡瘯銆? 

(3)  鍙橀噺浼樺寲錛氫紭鍖栫▼搴忎細(xì)鏍規(guī)嵁鍙橀噺鐨勪嬌鐢ㄦ儏鍐典紭鍖栧彉閲忋備緥濡傦紝鍑芥暟涓湁涓涓湭琚嬌鐢ㄧ殑鍙橀噺錛屽湪  Debug  鐗堜腑瀹冩湁鍙兘鎺╃洊涓涓暟緇勮秺鐣岋紝鑰屽湪  Release  鐗堜腑錛岃繖涓彉閲忓緢鍙兘琚紭鍖栬皟錛屾鏃舵暟緇勮秺鐣屼細(xì)鐮村潖鏍堜腑鏈夌敤鐨勬暟鎹傚綋鐒?dòng)灱屽疄闄呯殑鎯呭喌浼?xì)姣旇繖澶嶆潅寰楀銆備笌姝ゆ湁鍏崇殑閿欒鏈夛細(xì)  
鈼? 闈炴硶璁塊棶錛屽寘鎷暟緇勮秺鐣屻佹寚閽堥敊璇瓑銆備緥濡? 
void  fn(void)  
{  
int  i;  
i  =  1;  
int  a[4];  
{  
int  j;  
j  =  1;  
}  
a[-1]  =  1;//褰撶劧閿欒涓嶄細(xì)榪欎箞鏄庢樉錛屼緥濡備笅鏍囨槸鍙橀噺  
a[4]  =  1;  
}  
j  铏界劧鍦ㄦ暟緇勮秺鐣屾椂宸插嚭浜?jiǎn)浣滅敤鍩熷Q屼絾鍏剁┖闂村茍鏈敹鍥烇紝鍥犺? i  鍜? j  灝變細(xì)鎺╃洊瓚婄晫銆傝? Release  鐗堢敱浜? i銆乯  騫舵湭鍏跺緢澶т綔鐢ㄥ彲鑳戒細(xì)琚紭鍖栨帀錛屼粠鑰屼嬌鏍堣鐮村潖銆? 

3.  _DEBUG  涓? NDEBUG  錛氬綋瀹氫箟浜? _DEBUG  鏃訛紝assert()  鍑芥暟浼?xì)琚~栬瘧錛岃? NDEBUG  鏃朵笉琚紪璇戙傞櫎姝や箣澶栵紝VC++涓繕鏈変竴緋誨垪鏂█瀹忋傝繖鍖呮嫭錛? 

ANSI  C  鏂█  void  assert(int  expression  );  
C  Runtime  Lib  鏂█  _ASSERT(  booleanExpression  );  
_ASSERTE(  booleanExpression  );  
MFC  鏂█  ASSERT(  booleanExpression  );  
VERIFY(  booleanExpression  );  
ASSERT_VALID(  pObject  );  
ASSERT_KINDOF(  classname,  pobject  );  
ATL  鏂█  ATLASSERT(  booleanExpression  );  
姝ゅ錛孴RACE()  瀹忕殑緙栬瘧涔熷彈  _DEBUG  鎺у埗銆? 

鎵鏈夎繖浜涙柇璦閮藉彧鍦? Debug鐗堜腑鎵嶈緙栬瘧錛岃屽湪  Release  鐗堜腑琚拷鐣ャ傚敮涓鐨勪緥澶栨槸  VERIFY()  銆備簨瀹炰笂錛岃繖浜涘畯閮芥槸璋冪敤浜? assert()  鍑芥暟錛屽彧涓嶈繃闄勫姞浜?jiǎn)涓浜涗笌搴撴湁鍏崇殑璋冭瘯浠g爜銆傚鏋滀綘鍦ㄨ繖浜涘畯涓姞鍏ヤ簡(jiǎn)浠諱綍紼嬪簭浠g爜錛岃屼笉鍙槸甯冨皵琛ㄨ揪寮忥紙渚嬪璧嬪箋佽兘鏀瑰彉鍙橀噺鍊肩殑鍑芥暟璋冪敤  絳夛級(jí)錛岄偅涔? Release  鐗堥兘涓嶄細(xì)鎵ц榪欎簺鎿嶄綔錛屼粠鑰岄犳垚閿欒銆傚垵瀛﹁呭緢瀹規(guī)槗鐘繖綾婚敊璇紝鏌ユ壘鐨勬柟娉曚篃寰堢畝鍗曪紝鍥犱負(fù)榪欎簺瀹忛兘宸插湪涓婇潰鍒楀嚭錛屽彧瑕佸埄鐢? VC++  鐨? Find  in  Files  鍔熻兘鍦ㄥ伐紼嬫墍鏈夋枃浠朵腑鎵懼埌鐢ㄨ繖浜涘畯鐨勫湴鏂瑰啀涓涓媯(gè)鏌ュ嵆鍙傚彟澶栵紝鏈変簺楂樻墜鍙兘榪樹細(xì)鍔犲叆  #ifdef  _DEBUG  涔嬬被鐨勬潯浠剁紪璇戯紝涔熻娉ㄦ剰涓涓嬨? 
欏轟究鍊煎緱涓鎻愮殑鏄? VERIFY()  瀹忥紝榪欎釜瀹忓厑璁鎬綘灝嗙▼搴忎唬鐮佹斁鍦ㄥ竷?yōu)當(dāng)琛ㄨ緫旨忛噷銆傝繖涓畯閫氬父鐢ㄦ潵媯(gè)鏌? Windows  API  鐨勮繑鍥炲箋傛湁浜涗漢鍙兘涓鴻繖涓師鍥犺屾互鐢? VERIFY()  錛屼簨瀹炰笂榪欐槸鍗遍櫓鐨勶紝鍥犱負(fù)  VERIFY()  榪濆弽浜?jiǎn)鏂a鐨勬濇兂錛屼笉鑳戒嬌紼嬪簭浠g爜鍜岃皟璇曚唬鐮佸畬鍏ㄥ垎紱伙紝鏈緇堝彲鑳戒細(xì)甯︽潵寰堝楹葷儲(chǔ)銆傚洜姝わ紝涓撳浠緩璁敖閲忓皯鐢ㄨ繖涓畯銆? 

4.  /GZ  閫夐」錛氳繖涓夐」浼?xì)鍋氫互涓嫎q欎簺浜? 

(1)  鍒濆鍖栧唴瀛樺拰鍙橀噺銆傚寘鎷敤  0xCC  鍒濆鍖栨墍鏈夎嚜鍔ㄥ彉閲忥紝0xCD  (  Cleared  Data  )  鍒濆鍖栧爢涓垎閰嶇殑鍐呭瓨錛堝嵆鍔ㄦ佸垎閰嶇殑鍐呭瓨錛屼緥濡? new  錛夛紝0xDD  (  Dead  Data  )  濉厖宸茶閲婃斁鐨勫爢鍐呭瓨錛堜緥濡? delete  錛夛紝0xFD(  deFencde  Data  )  鍒濆鍖栧彈淇濇姢鐨勫唴瀛橈紙debug  鐗堝湪鍔ㄦ佸垎閰嶅唴瀛樼殑鍓嶅悗鍔犲叆淇濇姢鍐呭瓨浠ラ槻姝㈣秺鐣岃闂級(jí)錛屽叾涓嫭鍙蜂腑鐨勮瘝鏄井杞緩璁殑鍔╄璇嶃傝繖鏍峰仛鐨勫ソ澶勬槸榪欎簺鍊奸兘寰堝ぇ錛屼綔涓烘寚閽堟槸涓嶅彲鑳界殑錛堣屼笖  32  浣嶇郴緇熶腑鎸囬拡寰堝皯鏄鏁板鹼紝鍦ㄦ湁浜涚郴緇熶腑濂囨暟鐨勬寚閽堜細(xì)浜х敓榪愯鏃墮敊璇級(jí)錛屼綔涓烘暟鍊間篃寰堝皯閬囧埌錛岃屼笖榪欎簺鍊間篃寰堝鏄撹鯨璁わ紝鍥犳榪欏緢鏈夊埄浜庡湪  Debug  鐗堜腑鍙戠幇  Release  鐗堟墠浼?xì)閬囧埌鐨勯敊璇傝鐗瑰埆娉ㄦ剰鐨勬槸錛屽緢澶氫漢璁や負(fù)緙栬瘧鍣ㄤ細(xì)鐢? 0  鏉ュ垵濮嬪寲鍙橀噺錛岃繖鏄敊璇殑錛堣屼笖榪欐牱寰堜笉鍒╀簬鏌ユ壘閿欒錛夈? 
(2)  閫氳繃鍑芥暟鎸囬拡璋冪敤鍑芥暟鏃訛紝浼?xì)閫氳繃媯(gè)鏌ユ爤鎸囬拡楠岃瘉鍑芥暟璋冪敤鐨勫尮閰嶆с傦紙闃叉鍘熷艦涓嶅尮閰嶏級(jí)  
(3)  鍑芥暟榪斿洖鍓嶆鏌ユ爤鎸囬拡錛岀‘璁ゆ湭琚慨鏀廣傦紙闃叉瓚婄晫璁塊棶鍜屽師褰笉鍖歸厤錛屼笌絎簩欏瑰悎鍦ㄤ竴璧峰彲澶ц嚧妯℃嫙甯ф寚閽堢渷鐣? FPO  錛? 

閫氬父  /GZ  閫夐」浼?xì)閫犳垚  Debug  鐗堝嚭閿欒? Release  鐗堟甯哥殑鐜拌薄錛屽洜涓? Release  鐗堜腑鏈垵濮嬪寲鐨勫彉閲忔槸闅忔満鐨勶紝榪欐湁鍙兘浣挎寚閽堟寚鍚戜竴涓湁鏁堝湴鍧鑰屾帺鐩栦簡(jiǎn)闈炴硶璁塊棶銆? 

闄ゆ涔嬪錛?Gm  /GF  絳夐夐」閫犳垚閿欒鐨勬儏鍐墊瘮杈冨皯錛岃屼笖浠栦滑鐨勬晥鏋滄樉鑰屾槗瑙侊紝姣旇緝瀹規(guī)槗鍙戠幇銆? 
--------------------------------------------------------------  
Release鏄彂琛岀増鏈?姣擠ebug鐗堟湰鏈変竴浜涗紭鍖栵紝鏂囦歡姣擠ebug鏂囦歡灝? 
Debug鏄皟璇曠増鏈紝鍖呮嫭鐨勭▼搴忎俊鎭洿澶? 
Release鏂規(guī)硶錛? 
build-&gt;batch  build-&gt;build灝監(jiān)K.  

-----------------------------------------------------  

涓銆?amp;quot;Debug鏄皟璇曠増鏈紝鍖呮嫭鐨勭▼搴忎俊鎭洿澶?amp;quot;  

琛ュ厖錛氬彧鏈塂EBUG鐗堢殑紼嬪簭鎵嶈兘璁劇疆鏂偣銆佸崟姝ユ墽琛屻佷嬌鐢═RACE/ASSERT絳夎皟璇曡緭鍑?guó)櫙彞銆俁EALEASE涓嶅寘鍚換浣曡皟璇曚俊鎭紝鎵浠ヤ綋縐皬銆佽繍琛岄熷害蹇? 

浜屻佷竴鑸彂甯價(jià)elease鐨勬柟娉曢櫎浜?jiǎn)hzh_shat(姘?  鎵璇寸殑涔嬪錛岃繕鍙互project-&gt;Set  Active  Config錛岄変腑release鐗堟湰銆傛鍚庯紝鎸塅5鎴朏7緙栬瘧鎵寰楃殑緇撴灉灝辨槸release鐗堟湰

]]>
DLL 綰跨▼鏈湴瀛樺偍http://www.shnenglu.com/road420/archive/2009/10/26/99510.html娣遍們鑰?/dc:creator>娣遍們鑰?/author>Mon, 26 Oct 2009 10:33:00 GMThttp://www.shnenglu.com/road420/archive/2009/10/26/99510.htmlhttp://www.shnenglu.com/road420/comments/99510.htmlhttp://www.shnenglu.com/road420/archive/2009/10/26/99510.html#Feedback0http://www.shnenglu.com/road420/comments/commentRss/99510.htmlhttp://www.shnenglu.com/road420/services/trackbacks/99510.htmlDLL, 綰跨▼鏈湴瀛樺偍
1.姒傝
.鏋勯燚LL  
   (1)浠呭鍑哄嚱鏁?/font>
      DLL鍙互瀵煎嚭鍏ㄥ眬鍙橀噺鍜岀被錛屼絾鎴戜滑涓嶅緩璁繖涔堝仛錛屽緩璁鍑哄嚱鏁般?/font>
   (2).lib
      姣忎釜DLL閮芥湁涓庝箣鐩稿搴旂殑.lib鏂囦歡,璇ユ枃浠朵腑鍒楀嚭浜?/font>DLL涓鍑虹殑鍑芥暟鍜屽彉閲忕殑絎﹀彿鍚?/font>
   (3)鎸囧畾瑕佸鍑虹殑鍑芥暟鍚?/font>
       鍥犱負(fù)涓嶅悓緙栬瘧鍣ㄧ殑Name mangle瑙勫垯涓嶅悓錛岃繖灝卞鑷?/font>DLL涓嶈兘璺ㄧ紪璇戝櫒浣跨敤銆?/font>
       鏈変互涓嬩袱縐嶆柟娉曞彲浠ヨВ鍐寵繖涓棶棰橈細(xì)
            1.鍦?/font>.def鏂囦歡涓寚瀹氳瀵煎嚭鐨勫嚱鏁板悕
            2.鍦ㄧ紪璇戞寚涓寚瀹氳瀵煎嚭鐨勫嚱鏁板悕錛?/font>
                #pragma comment(linker, "/export:MyFunc=_MyFunc@8")
.DLL鍔犺澆璺緞
    褰撻渶瑕佸姞杞戒竴涓?/font>DLL鏃訛紝緋葷粺浼?xì)渚濈収涓嬮潰鐨剻搴搴忓幷d鎵炬墍闇DLL鐩村埌鎵懼埌涓烘錛岀劧鍚庡姞杞斤紝鍚﹀垯鍔犺澆澶辮觸銆?/font>
              (1)褰撳墠鍙墽琛屾枃浠惰礬寰?/font>
              (2)GetWindowsDirectory榪斿洖鐨刉indows緋葷粺璺緞
              (3)16浣嶇郴緇熺殑璺緞 windows"system
              (4)GetSystemDirectory榪斿洖鐨刉indows緋葷粺璺緞
              (5)褰撳墠榪涚▼鎵鍦ㄨ礬寰?/font>
              (6)PATH鐜涓墍鎸囧畾鐨勮礬寰?/font>
­
.鍒涘緩\浣跨敤鍔ㄦ侀摼鎺ュ簱
棣栧厛蹇呴』鍒涘緩涓涓寘鍚渶瑕佸鍑虹殑絎﹀彿鐨勫ご鏂囦歡錛屼互渚垮叾浠栫▼搴忛摼鎺ュ埌璇ll涓婏細(xì)
// dllexample.h
#ifdef DLLEXAMPLE_EXPORTS // 鍦ㄧ紪璇戝懡浠や腑宸插畾涔夛紝鎵浠ュ疄闄呯敤鐨勬槸 __declspec(dllexport)
#define DLLEXAMPLE_API __declspec(dllexport)
#else
#define DLLEXAMPLE_API __declspec(dllimport)
#endif
DLLEXAMPLE_API int fnDllexample(void);
褰撳叾浠栧簲鐢ㄥ寘鍚澶存枃浠訛紝鎰忓浘浣跨敤璇ll鐨勫鍑虹鍙鋒椂錛屽洜涓烘病鏈夊畾涔塂LLEXAMPLE_EXPORTS錛屾墍浠ヤ嬌鐢ㄧ殑鏄痏_declspec(dllimport)錛岃繖鏍風(fēng)紪璇戝櫒緙栬瘧鏃朵究鐭ラ亾榪欐槸浠庡閮ㄥ紩鍏ョ殑鍑芥暟銆傚湪閾炬帴鏃訛紝閾炬帴紼嬪簭灝嗙敓鎴愬鍏ヨ〃(ImportAddressTable),璇ヨ〃緗楀垪浜?jiǎn)鎵鏈夎皟鐢ㄥ埌鐨勫嚱鏁幫紝浠ュ強(qiáng)涓涓┖鐧界殑瀵瑰簲鍦板潃銆傚湪紼嬪簭鎵ц鏃訛紝鍔犺澆鍣ㄥ皢鍔ㄦ佺殑濉叆姣忎釜鍑芥暟絎﹀彿鍦ㄦ湰榪涚▼涓殑鍦板潃錛屼嬌寰楃▼搴忚兘姝g‘鐨勮皟鐢ㄥ埌dll涓殑鍑芥暟涓娿?
榪欑閫氳繃dll鎻愪緵鐨?h鍜?lib鏂囦歡榪涜閾炬帴dll鐨勪嬌鐢ㄦ柟寮忥紝縐頒負(fù)闅愬紡閾炬帴銆傜敤vc寮鍙戠▼搴忔椂錛屽嚑涔庢墍鏈夌殑緋葷粺API璋冪敤閮界敤浜?jiǎn)闅愬紡閾炬帴銆?
.鏄懼紡閾炬帴
鍦╡xe鍒涘緩鏃朵笉寮曠敤.lib鏂囦歡涓殑絎﹀彿錛屽綋鐒朵篃涓嶅繀鍖呭惈.h澶存枃浠訛紝鑰屾槸鐢辯▼搴忚皟鐢↙oadLibrary(Ex)浠ュ強(qiáng)GetProcAddress鍑芥暟鏉ヨ幏鍙栨瘡涓渶瑕佷嬌鐢ㄧ殑鍑芥暟鍦板潃錛屼粠鑰岃繘琛宒ll涓殑鍑芥暟璋冪敤錛岃繖縐峝ll浣跨敤鏂規(guī)硶縐頒負(fù)鏄懼紡閾炬帴銆傛樉寮忛摼鎺ユ椂涓嶇敓鎴愬搴攄ll鐨処AT.
褰撳喅瀹氫笉鍐嶄嬌鐢ㄨdll鏃訛紝閫氳繃璋冪敤FreeLibrary鏉ュ嵏杞姐傞渶瑕佹敞鎰忕殑鏄紝鍚屼竴涓繘紼嬩腑鍏辮璋冪敤LoadLibrary鐨勬鏁拌鍜岃皟鐢‵reeLibrary鐨勬鏁扮浉絳夛紝鍥犱負(fù)緋葷粺緇存姢浜?jiǎn)涓涓嬌鐢ㄨ鏁幫紝褰撹鏁頒負(fù)0鏃訛紝鎵嶄細(xì)鐪熸鐨勫嵏杞借dll.
濡傛灉鎯崇‘璁や竴涓猟ll鏄惁宸茬粡琚槧灝勫埌榪涚▼絀洪棿涓紝灝介噺浣跨敤GetModuleHandle錛屾渶濂戒笉瑕佸啋鐒朵嬌鐢↙oadLibrary(Ex).
GetProcAddress鍙互浼犻掑嚱鏁板悕鎴栬呭簭鍙?閫氳繃MAKEINTRESOURCE(2)鏉?鍒朵綔"搴忓彿).
­
1.1鍔ㄦ佸姞杞紻LL鏂囦歡 LoadLibraryEx
HMODULE LoadLibraryEx( //榪斿洖DLL鍔犺澆鍒拌繘紼嬬┖闂村師棣栧湴鍧銆?/font>
PCTSTR pszDLLPathName,
HANDLE hFile,
DWORD dwFlags);
dwFlags 鍙互鏈変互涓嬪嚑涓?/font>
              (1) DONT_RESOLVE_DLL_REFERENCES
                                    寤鴻姘歌繙涓嶈浣挎湁榪欎釜鍊鹼紝瀹冪殑瀛樺湪浠呬粎鏄負(fù)浜?jiǎn)鍚戝悗鍏煎畯V?/font>
                  鏇村鍐呭璇瘋闂細(xì)http://blogs.msdn.com/oldnewthing/archive/2005/02/14/372266.aspx
              (2) LOAD_LIBRARY_AS_DATAFILE
                  鎶婅鍔犺澆鐨?/font>DLL鏂囦歡浠ユ暟鎹枃浠剁殑褰㈠紡鍔犺澆鍒拌繘紼嬩腑銆?/font>
                  GetModuleHandle鍜?/font>GetProcAddress榪斿洖NULL
              (3) LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE
                  涓庡墠鑰呯浉鍚岋紝涓嶅悓鐨勬椂鐙崰鎵撳紑錛岀姝㈠叾瀹冭繘紼嬭闂拰淇敼璇?/font>DLL涓殑鍐呭銆?/font>
              (4) LOAD_LIBRARY_AS_IMAGE_RESOURCE
                  涓嶄慨鏀?/font>DLL涓殑RVA錛屼互image鐨勫艦寮忓姞杞藉埌榪涚▼涓傚父涓?/font>LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE涓璧蜂嬌鐢ㄣ?/font>
              (5) LOAD_WITH_ALTERED_SEARCH_PATH
                   淇敼DLL鐨勫姞杞借礬寰?/font>
1.2 DLL鐨勫姞杞戒笌鍗歌澆
    (1)鍔犺澆
       涓嶈鍦ㄥ悓涓榪涚▼涓紝鍚屾椂浣跨敤LoadLIbrary鍜?/font>LoadLibraryEx鍔犺澆鍚屼竴DLL鏂囦歡銆?/font>
       DLL鐨勫紩鐢ㄨ鏁版槸浠ヨ繘紼嬩負(fù)鍗曚綅鐨勩?/font>LoadLibrary浼?xì)鎶?/font>DLL鏂囦歡鍔犺澆鍒板唴瀛橈紝鐒跺悗鏄犲皠鍒拌繘紼嬬┖闂翠腑銆?/font>
       澶氭鍔犺澆鍚屼竴DLL鍙細(xì)澧炲姞寮曠敤璁℃暟鑰屼笉浼?xì)澶殝啤鏄牉畡銆傚綋鎵鏈夎繘紼嬪DLL鐨勫紩鐢ㄨ鏁伴兘涓?/font>0鏃訛紝緋葷粺浼?xì)鍦ㄥ唴瀛樹腑閲婃斁璇?/font>DLL銆?/font>
    (2)鍗歌澆
         FreeLibrary,FreeLibraryAndExitThread瀵瑰綋鍓嶈繘紼嬬殑DLL鐨勫紩鐢ㄨ鏁板噺1
    (3) GetProcAddress
         鍙栧緱鍑芥暟鍦板潃銆傚畠鍙帴鍙?/font>ANSI瀛楃涓層?/font>
2.DLL鐨勫叆鍙e嚱鏁?/strong>
      2.1 DllMain
              BOOL WINAPI DllMain(
              HINSTANCE hInstDll, ""鍔犺澆鍚庡湪榪涚▼涓殑铏氭嫙鍦板潃
              DWORD fdwReason, ""緋葷粺鍥犱綍鑰岃皟鐢ㄨ鍑芥暟
              PVOID fImpLoad ""鏌ョ湅鏄殣宸ヨ繕鏄姩鎬佸姞杞借DLL
    DLLs鐢?/font>DllMain鏂規(guī)硶鏉ュ垵濮嬪寲浠栦滑鑷凡銆?/font>DllMain涓殑浠g爜搴斿敖閲忕畝鍗曪紝鍙仛涓浜涚畝鍗曠殑鍒濆鍖栧伐浣溿?/font>
    涓嶈鍦?/font>DllMain涓皟鐢?/font>LoadLibrary,FreeLibrary鍙?/font>Shell, ODBC, COM, RPC, 鍜?/font> socket 鍑芥暟錛屼粠鑰岄伩鍏嶄笉鍙鏈熺殑閿欒銆?/font>
  2.2 fdwReason鐨勫?/strong>
    (1)DLL_PROCESS_ATTACH
      緋葷粺鍦ㄤ負(fù)姣忎釜榪涚▼絎竴嬈″姞杞借DLL鏃朵細(xì)錛屾墽琛?/font>DLL_PROCESS_ATTACH鍚庨潰鐨勮鍙ユ潵鍒濆鍖?/font>DLL,DllMain鐨勮繑鍥炲間粎鐢卞畠鍐沖畾銆?/font>
     緋葷粺浼?xì)蹇界?/font>DLL_THREAD_ATTACH絳夋墽琛屽悗DllMain鐨勮繑鍥炲箋?/font>
     濡傛灉DllMain榪斿洖FALSE,緋葷粺浼?xì)鑷姩璋冪?/font>DLL_PROCESS_DETACH鐨勪唬鐮佸茍瑙i櫎DLL鏂囦歡涓繘紼嬩腑鐨勫唴瀛樻槧灝勩?/font>        
    (2)DLL_PROCESS_DETACH
        濡傛灉DLL鏄洜榪涚▼緇堟鑰屽嵏杞藉叾鍦ㄨ繘紼嬩腑鐨勬槧灝勶紝閭d箞璐熻矗璋冪敤ExitProcess鐨勭嚎紼嬩細(xì)璋冪敤DllMain涓?/font>DLL_PROCESS_DETACH鎵瀵瑰簲鐨勪唬鐮併?/font>
        濡傛灉DLL鏄洜FreeLibrary鎴?/font>FreeLibraryAndExitThread錛岃屽嵏杞藉叾鍦ㄨ繘紼嬩腑鐨勬槧灝? 閭d箞FreeLibrary鎴?/font>FreeLibraryAndExitThread浼?xì)璐熻矗璋冪?/font>DllMain涓?/font>DLL_PROCESS_DETACH鎵瀵瑰簲鐨勪唬鐮併?/font>
        濡傛灉DLL鏄洜TerminateProcess鑰屽嵏杞藉叾鍦ㄨ繘紼嬩腑鐨勬槧灝?/font>,緋葷粺涓嶄細(xì)璋冪敤DllMain涓?/font>DLL_PROCESS_DETACH鎵瀵瑰簲鐨勪唬鐮併?/font>
    (3) DLL_THREAD_ATTACH
        鑻ヨ繘紼嬫槸鍏堝姞杞界殑DLL,鍚庡垱寤虹殑綰跨▼
        閭d箞鍦ㄨ繘紼嬩腑鍒涘緩鏂扮嚎紼嬫椂(涓葷嚎紼嬮櫎澶?/font>)錛岀郴緇熶細(xì)鎵ц璇ヨ繘紼嬪凡杞界殑鎵鏈?/font>DLL鐨?/font>DllMain涓?/font>DLL_THREAD_ATTACH瀵瑰簲鐨勪唬鐮併?/font>
         鑻ヨ繘紼嬫槸鍏堝垱寤虹殑綰跨▼,鍚庡姞杞界殑DLL
         閭d箞緋葷粺涓嶄細(xì)璋冪敤DLL鐨?/font>DllMain涓殑浠g爜銆?/font>
     (4) DLL_THREAD_DETACH
         榪涚▼涓殑綰跨▼閫鍑烘椂錛屼細(xì)鍏堟墽琛屾墍鏈夊凡鍔犺澆DLL鐨?/font>DllMain涓?/font>DLL_THREAD_DETACH鎵瀵瑰簲鐨勪唬鐮併傝嫢璇ヤ唬鐮佷腑鏈夋寰幆錛岀嚎紼嬩笉浼?xì)閫鍑恒?/font>              
2.3 鍚屾鍖朌llMain鐨勮皟鐢?/strong>
      鍚屼竴鏃墮棿鍙兘鏈変竴涓嚎紼嬭皟鐢?/font>DllMain涓殑浠g爜錛屾墍浠ヤ笅闈㈢殑浠g爜浼?xì)瀵艰嚧姝诲惊鐜?/font>
BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, PVOID fImpLoad) {
   HANDLE hThread;
   DWORD dwThreadId;
   switch (fdwReason) {
   case DLL_PROCESS_ATTACH:
      // The DLL is being mapped into the process' address space.
      // Create a thread to do some stuff.
      hThread = CreateThread(NULL, 0, SomeFunction, NULL,
         0, &dwThreadId);// CreateThread浼?/font>DLL_THREAD_ATTACH涓殑浠g爜錛屼絾鏄敱浜庡綋鍓嶇嚎紼嬪茍鏈墽琛屽畬姣?/font>,
      //鎵浠?/font>DLL_THREAD_ATTACH 涓殑浠g爜涓嶄細(xì)琚墽琛岋紝涓?/font>CreateThread姘告棤涓嶄細(xì)榪斿洖銆?/font>
      // Suspend our thread until the new thread terminates.
      WaitForSingleObject(hThread, INFINITE);
­
      // We no longer need access to the new thread.
      CloseHandle(hThread);
      break;
­
   case DLL_THREAD_ATTACH:
      // A thread is being created.
      break;
­
   case DLL_THREAD_DETACH:
      // A thread is exiting cleanly.
      break;
­
   case DLL_PROCESS_DETACH:
      // The DLL is being unmapped from the process' address space.
      break;
   }
   return(TRUE);
}
­
3.寤舵椂鍔犺澆DLL
(1)寤舵椂鍔犺澆DLL鐨勯檺鍒?/font>
         寤惰繜鍔犺澆鐨凞 L L鏄釜闅愬惈閾炬帴鐨凞 L L錛屽畠瀹為檯涓婅絳夊埌浣犵殑浠g爜璇曞浘寮曠敤D L L涓寘鍚殑涓涓鍙鋒椂鎵嶈繘琛屽姞杞?/font>錛屽畠涓庡姩鎬佸姞杞戒笉鍚屻?/font>
4.宸茬煡鐨凞LL (Known DLLs)
    浣嶇疆錛?/font>HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Control"Session Manager"KnownDLLs
    LoadLibrary鍦ㄦ煡鎵?/font>DLL浼?xì)鍏堝幓璇ヤ綅缃煡鎵炬湁鏃犵浉搴旂殑閿間笌DLL瑕佸搴旓紝鑻ユ湁鍒欐牴鎹摼鍊煎幓%SystemRoot%"System32鍔犺澆閿煎搴旂殑DLL
    鑻ユ棤鍒欐牴鎹粯璁よ鍘誨鎵?/font>DLL
5.Bind and Rebase Module
    瀹冨彲浠ョ▼搴忓惎鍔ㄧ殑閫熷害銆?/font>ReBaseImage
­
DLL 娉ㄥ叆鍜?/font>API閽?/font>(DLL Injection and API Hooking)
1.姒傝
  姣忎釜榪涚▼閮芥湁鑷凡鐙珛鐨勫湴鍧絀洪棿錛屼竴涓繘紼嬩笉鍙兘鍒涘緩涓涓寚鍚戝叾瀹冭繘紼嬪湴鍧絀洪棿鐨勬寚閽堛?/font>
   鐒惰屽鏋滄垜浠妸鑷凡鐨?/font>DLL娉ㄥ皠鍒板彟涓涓繘紼嬬殑鍦板潃絀洪棿鍘伙紝鎴戜滑灝卞彲浠ュ湪閭d釜琚敞鍏ョ殑榪涚▼閲屼負(fù)鎵嬈蹭負(fù)浜?jiǎn)銆?/font>
   Subclass鍚屼竴榪涚▼涓殑紿椾綋錛?/font>http://msdn2.microsoft.com/en-us/library/ms649784.aspx.
2.鐢ㄦ敞鍐岃〃娉ㄥ叆DLL
     璇ユ柟娉曢傜敤浜庣粰GUI鐨勭▼搴忔敞鍏?/font>DLL
     鎵鏈夌殑GUI搴旂敤紼嬪簭鍦ㄥ惎鍔ㄦ椂閮戒細(xì)鍔犺澆User32.dll錛岃屽湪User32.dll鐨?/font>DLL_PROCESS_ATTACH浠g爜鏍規(guī)嵁娉ㄥ唽琛ㄤ腑鐨勪俊鎭?/font>
鏉ユ敞鍏ョ敤鎴鋒寚瀹氱殑DLL
娉ㄥ唽琛ㄩ」銆HKEY_LOCAL_MACHINE"Software"Microsoft"Windows NT"CurrentVersion"Windows"
涓湁涓や釜鍊鹼細(xì)
    LoadAppInit_Dlls錛氶敭鍊間腑鎸囧畾瑕佹敞鍏ョ殑DLL銆濡?/font>:c:"inject.dll
AppInit_Dlls錛氳嫢鍏墮敭鍊間負(fù)1,鍒欐敞鍏?/font>LoadAppInit_Dlls涓寚瀹氱殑DLL錛屽惁鍒欒嫢涓?/font>0鍒欎笉娉ㄥ叆銆?/font>
    娉?/font>:
(1)LoadAppInit_Dlls涓殑鍊兼槸浠ョ┖鏍兼垨鍒嗗彿鍒嗛殧鐨勶紝鎵浠?/font>DLL鐨勮礬寰勪腑鏈濂戒笉瑕佹湁絀烘牸錛屾渶鍚庝笉鎸囧畾璺緞錛岀洿鎺ュ皢DLL鏀懼埌windows緋葷粺鐩綍涓?/font>
(2) 鐢ㄦ敞鍐岃〃娉ㄥ叆DLL鐨勬柟寮忔湁寰堝ぇ鐨勫眬闄愭?/font>,Kernel32.dll鍜?/font>Ntdll.dll涓湁鐨勫嚱鏁版墠鑳借皟鐢?/font>
涓.娉ㄥ叆dll
1.閫氳繃娉ㄥ唽琛ㄩ」 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs 鏉ユ寚瀹氫綘鐨刣ll鐨勮礬寰勶紝閭d箞褰撲竴涓狦UI紼嬪簭鍚姩鏃跺氨瑕佸姞杞経ser32.dll,鑰孶ser32.dll灝嗕細(xì)媯(gè)鏌ヨ繖涓鹼紝濡傛灉鏈夌殑璇濆氨LoadLibrary璇ll銆傝繖涓柟娉曚笉濂斤紝鍥犱負(fù)澶у鏁版儏鍐墊垜浠彧闇瑕侀拡瀵規(guī)х殑娉ㄥ叆錛屽茍涓旀病鍔炴硶娉ㄥ叆鍒頒笉浣跨敤User32.dll鐨勮繘紼嬩腑錛?
­
2.鐢⊿etWindowsHookEx鍑芥暟錛屽茍浼犻掔洰鏍囩嚎紼婭D銆侀渶瑕佹寕杞界殑Dll鍦ㄦ湰榪涚▼涓殑鏄犲皠鍦板潃(hInstance)銆佹浛鎹㈠嚱鏁板湪鏈繘紼嬩腑鐨勫湴鍧銆傝繖鏍鳳紝褰撹鎸傝澆榪涚▼鐨勮繖涓嚎紼嬭鎵ц鐩稿簲鐨勬搷浣滄椂(GETMESSAGE銆侀敭鐩樻秷鎭箣綾葷殑)錛屽氨浼?xì)鍙戠幇宸簿l忓畨瑁呬簡(jiǎn)WH_XX錛孴he system checks to see whether the DLL containing the GetMsgProc function is mapped into Process B's address space錛屽鏋滆繕鏈槧灝勮Dll錛屽垯寮哄埗LoadLibrary銆傜劧鍚庣郴緇熻皟鐢╤ThisInstance + (GetMsgProc - hInstance),浠庤屽疄鐜頒簡(jiǎn)浜嬩歡鐨勯氱煡銆傝繖縐嶆柟娉曠殑濂藉鏄彲浠ラ拡瀵規(guī)煇涓繘紼嬪畨瑁匟ook錛岀己鐐規(guī)槸瀹規(guī)槗琚洰鏍囪繘紼嬪彂鐜般佸悓鏍峰彧閫傜敤浜嶨UI榪涚▼銆傚鏋滀笉鍐嶆兂浣跨敤鎸傞挬浜?jiǎn)锛岄偅涔堥渶瑕佽皟鐢║nhookWindowsHookEx錛屽嵏杞紿ook銆?
­
3.浣跨敤榪滅▼綰跨▼娉ㄥ叆Dll(Injecting a DLL Using Remote Threads)
榪欎釜鏂規(guī)硶姣旇緝濂姐傛祦紼嬫槸榪欐牱鐨?
?璋冪敤VirtualAllocEx錛屽湪鐩爣榪涚▼淇濈暀涓鍧楀唴瀛橈紝騫舵彁浜わ紝鍏墮暱搴︽槸浣犺娉ㄥ叆Dll鐨勫叏璺緞闀垮害nLen + 1錛岃繑鍥炲湴鍧pv;
?璋冪敤WriteProcessMemory錛屽湪鐩爣榪涚▼鐨刾v澶勫啓鍏ll鐨勫叏璺緞錛屾敞鎰忚娣誨姞\0緇撴潫絎?
?鑾峰彇鏈繘紼?/strong>鐨凩oadLibrary鍑芥暟鐨勫湴鍧錛屾柟娉曟槸璋冪敤pfn = GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA")鈥斺斾箣鎵浠ヨ幏鍙栨湰榪涚▼鐨勫湴鍧錛屾槸鍥犱負(fù)kernel32.dll鍦ㄦ瘡涓繘紼嬬殑鏄犲皠鍦板潃閮界浉鍚岋紝鍊樿嫢涓嶅悓錛岄偅涔堟鏂規(guī)硶鍒欐棤鏁?
?璋冪敤HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0,  pfn, pv, 0, NULL)鏉ュ垱寤鴻繙紼嬬嚎紼嬶紝鍏跺疄榪欎釜綰跨▼鍑芥暟灝辨槸LoadLibrary鍑芥暟錛屽洜姝ゅ皢鎵ц鏄犲皠Dll鍒扮洰鏍囪繘紼嬬殑鎿嶄綔;
?璋冪敤VirtuallFreeEx(hProcessRemote, pv)閲婃斁鎻愪氦鐨勫唴瀛?
榪欎究瀹屾垚浜?jiǎn)dll娉ㄥ叆銆?
緙虹偣鏄笉鑳界敤鍦╳indows98涓娿備絾鏄浜巟p閮借琚井杞姏寮冪殑騫翠唬錛寃indows98鍦板獎(jiǎng)鍝嶄笉澶т簡(jiǎn)銆?
­
4.鎶潃緹婄毊鐨勭嫾錛氫嬌鐢ㄧ壒媧涗紛Dll鏉ユ敞鍏ll(Injecting a DLL with a Trojan DLL)
鍏跺疄灝辨槸鏇挎崲鏌愪釜鐩爣榪涚▼瑕佸姞杞界殑a.dll錛屽茍鎶奱.dll鐨勬墍鏈夊紩鍑哄嚱鏁扮敤鍑芥暟杞彂鍣ㄥ湪鑷繁鐨刣ll寮曞嚭銆?
­
5.鐢ㄨ皟璇曞嚱鏁版彃鍏ll
ReadProcessMemory鍜學(xué)riteProcessMemory鏄痺indows鎻愪緵鐨勮皟璇曞嚱鏁般傚鏋滃湪鏂規(guī)硶3涓皟鐢╓riteProcessMemory鍐欏叆鐨勪笉鏄瓧涓茶屾槸綺懼績(jī)緙栨帓濂界殑鏈哄櫒鎸囦護(hù)錛屽茍涓斿啓鍦ㄧ洰鏍囪繘紼嬬壒瀹氱殑鍦板潃絀洪棿錛岄偅涔堣繖孌墊満鍣ㄦ寚浠ゅ氨鏈夋満浼?xì)鎵ц鈥斺旇岃繖孌墊満鍣ㄦ寚浠ゆ伆濂藉畬鎴愪簡(jiǎn)LoadLibrary鍔熻兘;
­
6.鍏朵粬鏂規(guī)硶錛堢暐錛?
­
浜?鎸傛帴API(API Hooking)
鍏跺疄錛岃繖鏄澶氭敞鍏ョ殑Dll閮芥効鎰忓仛鐨勪簨鎯呫?
鎵璋撴寕鎺PI灝辨槸鍦ㄧ洰鏍囪繘紼嬭皟鐢╳indows API涔嬪墠錛屽厛鎵ц鎴戜滑鐨勪豢API鍑芥暟錛屼粠鑰屾帶鍒剁郴緇烝PI鐨勮涓猴紝杈懼埌鐗規(guī)畩鐨勭洰鐨勩?
鎴戜滑鐨勪豢閫犲嚱鏁板繀欏諱笌瑕佹浛鎹㈢殑緋葷粺API鏈夌浉鍚岀殑鍨嬪弬琛ㄤ互鍙?qiáng)鐩稿悓鐨剺q斿洖鍊肩被鍨?
­
1.鏀瑰啓緋葷粺API浠g爜鐨勫墠鍑犱釜瀛楄妭錛岄氳繃鍐欏叆jmp鎸囦護(hù)鏉ヨ煩杞埌鎴戜滑鐨勫嚱鏁般傚湪鎴戜滑鐨勫嚱鏁伴噷鎵ц鎿嶄綔錛屽彲浠ョ洿鎺ヨ繑鍥炰竴涓鹼紝涔熷彲浠ュ皢緋葷粺API鐨勫墠鍑犱釜瀛楄妭澶嶅師錛岃皟鐢ㄧ郴緇烝PI錛屽茍榪斿洖緋葷粺API鐨勫尖斺旈殢渚夸綘鎯蟲庝箞鍋氥?
姝ゆ柟娉曠殑緙虹偣鏄浜庢姠鍗犲紡澶氱嚎紼嬬殑緋葷粺涓嶅お綆$敤銆?
­
2.閫氳繃鏀瑰啓鐩爣榪涚▼IAT涓璋冪敤鐨勫嚱鏁板湴鍧鏉ヨ揪鍒扮洰鐨勩傚叿浣撴搷浣滆涔︿腑紺轟緥
­
­
­
綰跨▼鏈湴瀛樺偍(Thread-Local Storage)
渚嬪瓙C / C + +榪愯鏈熷簱瑕佷嬌鐢ㄧ嚎紼嬫湰鍦板瓨鍌ㄥ櫒錛?T L S錛夈傜敱浜庤繍琛屾湡搴撴槸鍦ㄥ綰跨▼搴旂敤紼嬪簭鍑虹幇鍓嶇殑璁稿騫磋璁$殑錛屽洜姝よ繍琛屾湡搴撲腑鐨勫ぇ澶氭暟鍑芥暟鏄敤浜庡崟綰跨▼搴旂敤紼嬪簭鐨勩傚嚱鏁皊 t r t o k灝辨槸涓緢濂界殑渚嬪瓙銆?/font>
灝藉彲鑳介伩鍏嶄嬌鐢ㄥ叏灞鍙橀噺鍜岄潤(rùn)鎬佸彉閲?/font>
1.鍔ㄦ乀LS
鍥?1-1 鐢ㄤ簬綆$悊T L S鐨勫唴閮ㄦ暟鎹粨鏋?/font>
­
鍦ㄥ垱寤虹嚎紼嬫椂錛岃繘紼嬩細(xì)涓哄綋鍓嶅垱寤虹殑綰跨▼鍒嗛厤涓涓?/font>void *鐨勬暟緇勪綔涓?/font>TLS鐢ㄣ傚畠鐢ㄤ簬瀛樺偍鍙檺褰撳墠綰跨▼鍙鐨勫叏灞鍙橀噺銆?/font>
浠庤屼嬌榪涚▼涓殑姣忎釜綰跨▼閮藉彲浠ユ湁鑷凡鐨?/font>(涓嶈兘鍏跺畠綰跨▼璁塊棶鐨?/font>)鍏ㄥ眬鍙橀噺銆?/font>
TlsAlloc鍦ㄨ繑鍥炴椂浼?xì)鍏堟妸妲戒腑鐨勫肩疆涓?/font>0銆傛瘡涓嚎紼嬭嚦灝戞湁64涓Ы銆?/font>
2.闈?rùn)鎬乀LS
              __declspec(thread)鍏抽敭瀛楃敤浜庡0鏄庯紝綰跨▼鏈湴鐨勫叏灞鍙橀噺銆?/font>
              瑕佹眰澹版槑鐨勫彉閲忓繀欏繪槸鍏ㄥ眬鍙橀噺鎴栭潤(rùn)鎬佸彉閲忋?/font>
3.Common API:
              TlsAlloc   TlsFree
              TlsSetValue   TlsGetValue
              __declspec(thread)


]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              久久综合九色综合网站| 亚洲午夜国产一区99re久久| 亚洲精品欧美精品| 亚洲无限av看| 美女国内精品自产拍在线播放| 欧美电影免费观看高清完整版| 国产精品久久久久久久久动漫 | 一本色道88久久加勒比精品 | 久久久亚洲综合| 亚洲国产视频直播| 一区二区黄色| 久久一区激情| 国产精品黄色在线观看| …久久精品99久久香蕉国产| 亚洲欧美国产77777| 久久综合五月| 亚洲视频免费在线观看| 麻豆乱码国产一区二区三区| 国产精品视频免费观看| 亚洲精华国产欧美| 欧美制服第一页| 亚洲精品小视频在线观看| 久久成人免费电影| 国产精品久久久久久av福利软件| 亚洲精品1区| 久久男人av资源网站| 一本一本久久a久久精品牛牛影视| 久久蜜桃av一区精品变态类天堂| 国产精品h在线观看| 亚洲欧洲精品一区二区精品久久久| 午夜天堂精品久久久久| 亚洲国产欧美另类丝袜| 欧美在线www| 国产精品青草久久久久福利99| 亚洲精品系列| 蜜乳av另类精品一区二区| 在线视频日本亚洲性| 欧美激情一区二区三区在线| 亚洲成人在线视频播放| 欧美伊人久久久久久久久影院| 亚洲蜜桃精久久久久久久| 久久这里只有| 狠狠做深爱婷婷久久综合一区 | 亚洲一区三区电影在线观看| 欧美激情小视频| 久久国内精品视频| 国产欧美日韩综合一区在线观看| 亚洲视频播放| 最新日韩在线| 鲁大师成人一区二区三区| 国产主播在线一区| 欧美一区二区啪啪| 亚洲香蕉成视频在线观看| 欧美日韩在线观看视频| av成人免费| 亚洲日本成人在线观看| 欧美/亚洲一区| 91久久精品日日躁夜夜躁欧美 | 欧美日韩一区二区视频在线观看 | 日韩一区二区福利| 欧美激情区在线播放| 亚洲国产一区二区精品专区| 美国十次成人| 久久精品日产第一区二区| 国产无一区二区| 久久国产精品网站| 午夜精品福利电影| 国产毛片一区| 久久精精品视频| 欧美一区二区三区啪啪| 国产亚洲激情在线| 久久久激情视频| 久久精品免费播放| 一区二区三区无毛| 免费看亚洲片| 欧美 日韩 国产一区二区在线视频| 亚洲第一在线| 亚洲欧洲精品一区二区| 欧美剧在线免费观看网站| 99精品欧美| 99热这里只有成人精品国产| 狼人天天伊人久久| 亚洲电影免费观看高清完整版在线观看 | 女人香蕉久久**毛片精品| 亚洲国产欧美在线 | 欧美日韩国产高清| 一区二区精品| 亚洲视频一区二区| 国产女精品视频网站免费| 久久成人在线| 久久久久国产精品厨房| 亚洲人成小说网站色在线| 91久久夜色精品国产九色| 欧美日本国产一区| 亚洲综合视频在线| 午夜亚洲伦理| 在线欧美电影| 91久久久在线| 国产精品一区二区三区四区| 久久精品午夜| 欧美成人国产一区二区| 亚洲一区二区在线看| 欧美亚洲在线| 亚洲日本欧美| 亚洲欧美第一页| 在线日韩成人| 99国产精品99久久久久久| 国产欧美日韩精品丝袜高跟鞋| 葵司免费一区二区三区四区五区| 欧美wwwwww| 亚洲欧美日韩另类| 久久久久国产一区二区三区| 99riav国产精品| 亚洲影院在线| 亚洲日韩成人| 亚洲欧美一区二区激情| 黄色成人小视频| 99一区二区| 狠狠色丁香婷婷综合| 亚洲精品日韩激情在线电影| 国产专区精品视频| 亚洲美女视频在线观看| 国内伊人久久久久久网站视频| 亚洲精品乱码久久久久久蜜桃91| 国产区亚洲区欧美区| 最新国产拍偷乱拍精品| 国产亚洲精品自拍| 亚洲理伦电影| 禁久久精品乱码| 夜夜嗨av一区二区三区免费区| 在线高清一区| 亚洲午夜精品一区二区三区他趣| 亚洲欧洲免费视频| 欧美一区国产二区| 亚洲综合色激情五月| 女生裸体视频一区二区三区| 久久精品国产综合| 欧美日韩另类丝袜其他| 麻豆成人91精品二区三区| 国产精品h在线观看| 欧美激情在线| 黑人极品videos精品欧美裸| av成人天堂| 亚洲精品久久久久久久久久久久 | 久久久亚洲精品一区二区三区| 亚洲欧美国产精品桃花| 欧美成人r级一区二区三区| 久久久久久久一区| 国产精品乱子乱xxxx| 亚洲日本欧美在线| 亚洲国产成人av在线| 香蕉久久夜色精品国产使用方法| 亚洲一区亚洲| 欧美欧美午夜aⅴ在线观看| 蜜桃av综合| 海角社区69精品视频| 亚洲欧美日韩中文视频| 一本久道久久久| 欧美高清在线播放| 免费观看30秒视频久久| 国产午夜精品久久久久久久| 亚洲一区成人| 亚洲欧美日韩视频一区| 欧美精品一区二区三区视频| 欧美激情视频在线播放| 伊人成人在线视频| 欧美在线一二三区| 久久精品国产96久久久香蕉| 国产欧美日韩免费| 亚洲你懂的在线视频| 亚洲在线观看免费| 欧美日韩伦理在线免费| 亚洲美女av黄| 亚洲手机在线| 欧美日韩一区自拍| 99re6这里只有精品| 在线视频欧美日韩精品| 欧美日韩国产一区精品一区| 亚洲伦理中文字幕| 一区二区日韩免费看| 欧美日韩成人综合天天影院| 亚洲精品中文字幕有码专区| 一区二区日韩| 国产精品久久午夜夜伦鲁鲁| 亚洲一区二区黄| 久久aⅴ国产紧身牛仔裤| 国产一区二区三区自拍| 久久av老司机精品网站导航| 每日更新成人在线视频| 亚洲承认在线| 欧美精品在线观看播放| 亚洲免费高清| 亚洲欧美日韩天堂一区二区| 国产伦理一区| 欧美在线三区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲女同性videos| 久久精品视频在线观看| 伊人夜夜躁av伊人久久| 免费成人小视频|