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

    鏇村彲鎬曠殑鏄紝浼氳浣犳帴瑙︾殑浜洪檯鍏崇郴闈炲父鍗曚竴錛岄櫎浜嗘湁闄愮殑鎶鏈漢鍛樹箣澶栦綘鍑犱箮瑙佷笉鍒板仛鍏朵粬琛屼笟宸ヤ綔鍜岃亴浣嶇殑浜猴紝浣犵殑鏈嬪弸鍦堝瓙灝忎笖鍗曚竴錛岀敋鑷崇牬鍧忎綘鍘熸湁鐨勭埍鎯咃紙鎯寵薄涓涓嬶紝浣犲湪澶栧湴鍋氱幇鍦哄紑鍙?涓湀浠ヤ笂錛屽嵈浠庢病璺熷コ鍙嬭榪囦竴闈㈢殑璇濓紝浣犵殑濂沖弸鏄笉鏄細瀵逛綘鍛茬墮瑁傚槾錛夈?br />
 

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

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

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

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

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

浜旂紼嬪簭璁捐鏂規硶

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

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

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

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

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

 

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

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

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

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

2錛庡鎬佹?/span>

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

3錛庣戶鎵挎?/span>

C++紼嬪簭涓紝鐢變竴涓被錛堢О涓哄熀綾伙級鍙互媧劇敓鍑烘柊綾伙紙縐頒負媧劇敓綾伙級銆傝繖縐嶆淳鐢熺殑璇硶鏈哄埗浣垮緱鏂扮被鐨勫嚭鐜拌交鏉捐嚜鐒訛紝浣垮緱涓涓鏉備簨鐗╁彲浠ヨ欏虹悊鎴愮珷鍦板綊緇撲負鐢遍愬眰媧劇敓鐨勫璞℃弿榪般?/span>媧劇敓浣垮緱紼嬪簭涓畾涔夌殑綾誨憟灞傛緇撴瀯銆傚浜庡瓙灞傜殑瀵瑰弬鏃㈠叿鏈夊叾鐖跺眰瀵硅薄鐨勫叡鎬э紟鍙堝叿鏈夎嚜韜殑鐗規с傜戶鎵挎ф槸涓涓被瀵硅薄鑾峰緱鍏跺熀綾誨璞$壒鎬х殑榪囩▼銆?/span>C++涓弗鏍煎湴瑙勫畾浜嗘淳鐢熺被瀵瑰叾鍩虹被鐨勭戶鎵垮師鍒欏拰璁塊棶鏉冮檺錛屼嬌寰楃▼搴忎腑瀵規暟鎹拰鍑芥暟鐨勮闂達紝闇鍦ㄥ鏃忓拰鏈嬪弸闂翠弗鏍煎尯鍒嗐?/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淇樿幏鏈夊叧浜嬩歡錛岀劧鍚庡皢娑堟伅鍒嗗埆杞彂鍒扮浉鍏沖簲鐢ㄧ▼搴忎腑鐨勬湁鍏沖璞★紝闇瑕佸娑堟伅浣滃嚭鍙嶅簲鐨勫璞″簲璇ユ彁渚涙秷鎭鐞嗗嚱鏁幫紝閫氳繃榪欎釜娑堟伅澶勭悊鍑芥暟瀹炵幇瀵硅薄鐨勪竴縐嶅姛鑳芥垨琛屼負銆傛墍浠ョ紪鍐欎簨浠墮┍鍔ㄧ▼搴忕殑澶ч儴鍒嗗伐浣滄槸涓哄悇涓璞?/span>(綾?/span>)娣誨姞鍚勭娑堟伅鐨勫鐞嗗嚱鏁?/span>銆傜敱浜庝竴涓璞″彲浠ユ槸娑堟伅鐨勬帴鏀惰咃紝鍚屾椂涔熷彲鑳芥槸娑堟伅鐨勫彂閫佽咃紝鎵鍙戦佺殑娑堟伅涓庢帴鏀跺埌鐨勬秷鎭篃鍙互鏄浉鍚岀殑娑堟伅錛岃屾湁浜涙秷鎭殑鍙戝嚭鏃墮棿鏄棤娉曢鐭ョ殑(姣斿鍏充簬閿洏鐨勬秷鎭?/span>)錛屽洜姝ゅ簲鐢ㄧ▼搴忕殑鎵ц欏哄簭鏄棤娉曢鐭ョ殑銆?/span>

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

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

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

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

5.        騫惰紼嬪簭璁捐

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

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



]]>
紼嬪簭鐨勫唴瀛樺垎閰?/title><link>http://m.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://m.shnenglu.com/road420/archive/2010/09/16/126758.html</guid><wfw:comment>http://m.shnenglu.com/road420/comments/126758.html</wfw:comment><comments>http://m.shnenglu.com/road420/archive/2010/09/16/126758.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/road420/comments/commentRss/126758.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/road420/services/trackbacks/126758.html</trackback:ping><description><![CDATA[涓涓敱c/C++緙栬瘧鐨勭▼搴忓崰鐢ㄧ殑鍐呭瓨鍒嗕負浠ヤ笅鍑犱釜閮ㄥ垎<br><font color=#0000ff>1銆佹爤鍖猴紙stack錛夆?/font> 鐢辯紪璇戝櫒鑷姩鍒嗛厤閲婃斁 錛屽瓨鏀懼嚱鏁扮殑鍙傛暟鍊鹼紝灞閮ㄥ彉閲忕殑鍊肩瓑銆傚叾鎿嶄綔鏂瑰紡綾諱技浜庢暟鎹粨鏋勪腑鐨勬爤銆?br><font color=#0000ff>2銆佸爢鍖猴紙heap錛?/font> 鈥?涓鑸敱紼嬪簭鍛樺垎閰嶉噴鏀撅紝 鑻ョ▼搴忓憳涓嶉噴鏀撅紝紼嬪簭緇撴潫鏃跺彲鑳界敱OS鍥炴敹 銆傛敞鎰忓畠涓庢暟鎹粨鏋勪腑鐨勫爢鏄袱鍥炰簨錛屽垎閰嶆柟寮忓掓槸綾諱技浜庨摼琛紝鍛靛懙銆?br><font color=#0000ff>3銆佸叏灞鍖猴紙闈欐佸尯錛夛紙static錛夆旓紝</font>鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲忕殑瀛樺偍鏄斁鍦ㄤ竴鍧楃殑錛屽垵濮嬪寲鐨勫叏灞鍙橀噺鍜岄潤鎬佸彉閲忓湪涓鍧楀尯鍩燂紝 鏈垵濮嬪寲鐨勫叏灞鍙橀噺鍜屾湭鍒濆鍖栫殑闈欐佸彉閲忓湪鐩擱偦鐨勫彟涓鍧楀尯鍩熴?- 紼嬪簭緇撴潫鍚庢湁緋葷粺閲婃斁<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; 緋葷粺鑷姩鍦ㄦ爤涓負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>鏍堬細<font color=#ff00ff>鍙鏍堢殑鍓╀綑絀洪棿澶т簬鎵鐢寵絀洪棿</font>錛岀郴緇熷皢涓虹▼搴忔彁渚涘唴瀛橈紝鍚﹀垯灝嗘姤寮傚父鎻愮ず鏍堟孩鍑恒?br>鍫嗭細<font color=#ff0000>棣栧厛搴旇鐭ラ亾鎿嶄綔緋葷粺鏈変竴涓褰曠┖闂插唴瀛樺湴鍧鐨勯摼琛?/font>錛屽綋緋葷粺鏀跺埌紼嬪簭鐨勭敵璇鋒椂錛?br>浼?閬嶅巻璇ラ摼琛紝瀵繪壘絎竴涓┖闂村ぇ浜庢墍鐢寵絀洪棿鐨勫爢緇撶偣錛岀劧鍚庡皢璇ョ粨鐐逛粠絀洪棽緇撶偣閾捐〃涓垹闄わ紝騫跺皢璇ョ粨鐐圭殑絀洪棿鍒嗛厤緇欑▼搴忥紝鍙﹀錛屽浜庡ぇ澶氭暟緋葷粺錛屼細鍦ㄨ繖鍧楀唴 瀛樼┖闂翠腑鐨勯鍦板潃澶勮褰曟湰嬈″垎閰嶇殑澶у皬錛岃繖鏍鳳紝浠g爜涓殑delete璇彞鎵嶈兘姝g‘鐨勯噴鏀炬湰鍐呭瓨絀洪棿銆傚彟澶栵紝鐢變簬鎵懼埌鐨勫爢緇撶偣鐨勫ぇ灝忎笉涓瀹氭濂界瓑浜庣敵璇風殑澶?灝忥紝緋葷粺浼氳嚜鍔ㄧ殑灝嗗浣欑殑閭i儴鍒嗛噸鏂版斁鍏ョ┖闂查摼琛ㄤ腑銆?br><font color=#0000ff>2.3鐢寵澶у皬鐨勯檺鍒?/font><br><font color=#ff00ff>鏍堬細鍦╓indows涓?鏍堟槸鍚戜綆鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄竴鍧?榪炵畫鐨勫唴瀛樼殑鍖哄煙</font>銆傝繖鍙ヨ瘽鐨勬剰鎬濇槸鏍堥《鐨勫湴鍧鍜屾爤鐨勬渶澶у閲忔槸緋葷粺棰勫厛瑙勫畾濂界殑錛屽湪 WINDOWS涓嬶紝鏍堢殑澶у皬鏄?M錛堜篃鏈夌殑璇存槸1M錛屾諱箣鏄竴涓紪璇戞椂灝辯‘瀹氱殑甯告暟錛夛紝濡傛灉鐢寵鐨勭┖闂磋秴榪囨爤鐨勫墿浣欑┖闂存椂錛屽皢鎻愮ずoverflow銆傚洜 姝わ紝鑳戒粠鏍堣幏寰楃殑絀洪棿杈冨皬銆?br><font color=#ff0000>鍫嗭細鍫嗘槸鍚戦珮鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄笉榪炵畫鐨勫唴瀛樺尯鍩熴?/font>榪欐槸鐢變簬緋葷粺鏄敤閾捐〃鏉ュ瓨鍌ㄧ殑絀洪棽鍐呭瓨鍦板潃鐨勶紝鑷劧鏄笉榪炵畫鐨勶紝鑰岄摼琛ㄧ殑閬嶅巻鏂瑰悜鏄敱浣庡湴鍧鍚戦珮鍦板潃銆傚爢鐨勫ぇ灝忓彈闄愪簬璁$畻鏈虹郴緇熶腑鏈夋晥鐨勮櫄鎷熷唴瀛樸傜敱姝ゅ彲瑙侊紝鍫嗚幏寰楃殑絀洪棿姣旇緝鐏墊椿錛屼篃姣旇緝澶с?br><font color=#0000ff>2.4鐢寵鏁堢巼鐨勬瘮杈冿細<br></font><font color=#ff00ff>鏍堢敱緋葷粺鑷姩鍒嗛厤錛岄熷害杈冨揩銆備絾紼嬪簭鍛樻槸鏃犳硶鎺у埗鐨勩?/font><br><font color=#ff0000>鍫嗘槸鐢眓ew鍒嗛厤鐨勫唴瀛橈紝涓鑸熷害姣旇緝鎱紝鑰屼笖瀹規槗浜х敓鍐呭瓨紕庣墖,涓嶈繃鐢ㄨ搗鏉ユ渶鏂逛究.</font><br>鍙﹀錛屽湪WINDOWS涓嬶紝鏈濂界殑鏂瑰紡鏄敤VirtualAlloc鍒嗛厤鍐呭瓨錛屼粬涓嶆槸鍦ㄥ爢錛屼篃涓嶆槸鍦ㄦ爤鏄洿鎺ュ湪榪涚▼鐨勫湴鍧絀洪棿涓繚鐣欎竴蹇唴瀛橈紝铏界劧鐢ㄨ搗鏉ユ渶涓嶆柟渚褲備絾鏄熷害錛?涔熸渶鐏墊椿<br><font color=#0000ff>2.5鍫嗗拰鏍堜腑鐨勫瓨鍌ㄥ唴瀹?/font><br>鏍堬細 鍦ㄥ嚱鏁拌皟鐢ㄦ椂錛岀涓涓繘鏍堢殑鏄富鍑芥暟涓悗鐨勪笅涓鏉℃寚浠わ紙鍑芥暟璋冪敤璇彞鐨勪笅涓鏉″彲鎵ц璇彞錛夌殑鍦板潃錛岀劧鍚庢槸鍑芥暟鐨勫悇涓弬鏁幫紝鍦ㄥぇ澶氭暟鐨凜緙栬瘧鍣ㄤ腑錛屽弬鏁版槸鐢卞彸寰宸﹀叆鏍堢殑錛岀劧鍚庢槸鍑芥暟涓殑灞閮ㄥ彉閲忋傛敞鎰忛潤鎬佸彉閲忔槸涓嶅叆鏍堢殑銆?br>褰撴湰嬈″嚱鏁拌皟鐢ㄧ粨鏉熷悗錛屽眬閮ㄥ彉閲忓厛鍑烘爤錛岀劧鍚庢槸鍙傛暟錛屾渶鍚庢爤欏舵寚閽堟寚鍚戞渶寮濮嬪瓨鐨勫湴鍧錛屼篃灝辨槸涓誨嚱鏁頒腑鐨勪笅涓鏉℃寚浠わ紝紼嬪簭鐢辮鐐圭戶緇繍琛屻?br>鍫嗭細涓鑸槸鍦ㄥ爢鐨勫ご閮ㄧ敤涓涓瓧鑺傚瓨鏀懼爢鐨勫ぇ灝忋傚爢涓殑鍏蜂綋鍐呭鏈夌▼搴忓憳瀹夋帓銆?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璇誨彇瀛楃錛屾樉鐒舵參浜嗐?br><br><strong>2.7灝忕粨錛?/strong><br>鍫嗗拰鏍堢殑鍖哄埆鍙互鐢ㄥ涓嬬殑姣斿柣鏉ョ湅鍑猴細<br><font color=#ff00ff>浣跨敤鏍堝氨璞℃垜浠幓楗閲屽悆楗?/font>錛屽彧綆$偣鑿滐紙鍙戝嚭鐢寵錛夈佷粯閽便佸拰鍚冿紙浣跨敤錛夛紝鍚冮ケ浜嗗氨璧幫紝涓嶅繀鐞嗕細鍒囪彍銆佹礂鑿滅瓑鍑嗗宸ヤ綔鍜屾礂紕椼佸埛閿呯瓑鎵熬宸ヤ綔錛?font color=#ff00ff>浠栫殑濂藉鏄揩鎹鳳紝浣嗘槸鑷敱搴﹀皬銆?/font><br><font color=#ff0000>浣跨敤鍫嗗氨璞℃槸鑷繁鍔ㄦ墜鍋氬枩嬈㈠悆鐨勮彍鑲?/font>錛屾瘮杈冮夯鐑︼紝浣嗘槸姣?font color=#ff0000>杈冪鍚堣嚜宸辯殑鍙e懗錛岃屼笖鑷敱搴﹀ぇ</font>銆?/p> <img src ="http://m.shnenglu.com/road420/aggbug/126758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/road420/" target="_blank">娣遍們鑰?/a> 2010-09-16 14:22 <a href="http://m.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://m.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://m.shnenglu.com/road420/archive/2010/09/16/126755.html</guid><wfw:comment>http://m.shnenglu.com/road420/comments/126755.html</wfw:comment><comments>http://m.shnenglu.com/road420/archive/2010/09/16/126755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/road420/comments/commentRss/126755.html</wfw:commentRss><trackback:ping>http://m.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 閽╁瓙鎶鏈潵瀹炵幇銆傛湰鏂囧皢璁ㄨ闄や簡浣跨敤 Windows 閽╁瓙鎶鏈互澶栫殑鍏跺畠鎶鏈潵瀹炵幇榪欎釜鍔熻兘銆傚鍥句竴鎵紺猴細</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>涓轟簡鎵懼埌瑙e喅闂鐨勬柟娉曘傞鍏堣鎴戜滑綆鍗曞洖欏句竴涓嬮棶棰樿儗鏅?br>銆銆瑕?#8220;璇誨彇”鏌愪釜鎺т歡鐨勫唴瀹光斺旀棤璁鴻繖涓帶浠舵槸鍚﹀睘浜庡綋鍓嶇殑搴旂敤紼嬪簭鈥斺旈氬父閮芥槸鍙戦?WM_GETTEXT 娑堟伅鏉ュ疄鐜般傝繖涓妧鏈篃鍚屾牱搴旂敤鍒扮紪杈戞帶浠訛紝浣嗘槸濡傛灉璇ョ紪杈戞帶浠跺睘浜庡彟澶栦竴涓繘紼嬪茍璁劇疆浜?ES_PASSWORD 寮忔牱錛岄偅涔堜笂闈㈣鐨勬柟娉曞氨琛屼笉閫氫簡銆傜敤 WM_GETTEXT 鏉ヨ幏鍙栨帶浠剁殑鍐呭鍙傜敤浜庤繘紼?#8220;鎷ユ湁”瀵嗙爜鎺т歡鐨勬儏鍐點傛墍浠ユ垜浠殑闂鍙樻垚浜嗗浣曞湪鍙﹀涓涓繘紼嬬殑鍦板潃絀洪棿鎵ц錛?/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 閽╁瓙涓昏浣滅敤鏄洃鎺ф煇浜涚嚎紼嬬殑娑堟伅嫻併傞氬父鎴戜滑灝嗛挬瀛愬垎涓烘湰鍦伴挬瀛愬拰榪滅▼閽╁瓙浠ュ強緋葷粺綰ч挬瀛愶紝鏈湴閽╁瓙涓鑸洃鎺у睘浜庢湰榪涚▼鐨勭嚎紼嬬殑娑堟伅嫻侊紝榪滅▼閽╁瓙鏄嚎紼嬩笓鐢ㄧ殑錛岀敤浜庣洃鎺у睘浜庡彟澶栬繘紼嬬殑綰跨▼娑堟伅嫻併傜郴緇熺駭閽╁瓙鐩戞帶榪愯鍦ㄥ綋鍓嶇郴緇熶腑鐨勬墍鏈夌嚎紼嬬殑娑堟伅嫻併?br>銆銆濡傛灉閽╁瓙浣滅敤鐨勭嚎紼嬪睘浜庡彟澶栫殑榪涚▼錛岄偅涔堜綘鐨勯挬瀛愯繃紼嬪繀欏婚┗鐣欏湪鏌愪釜鍔ㄦ侀摼鎺ュ簱錛圖LL錛変腑銆傜劧鍚庣郴緇熸槧灝勫寘鍚挬瀛愯繃紼嬬殑DLL鍒伴挬瀛愪綔鐢ㄧ殑綰跨▼鐨勫湴鍧絀洪棿銆俉indows灝嗘槧灝勬暣涓?DLL錛岃屼笉浠呬粎鏄挬瀛愯繃紼嬨傝繖灝辨槸涓轟粈涔?Windows 閽╁瓙鑳借鐢ㄤ簬灝嗕唬鐮佹敞鍏ュ埌鍒殑榪涚▼鍦板潃絀洪棿鐨勫師鍥犮?br>銆銆鏈枃鎴戜笉鎵撶畻娑夊強閽╁瓙鐨勫叿浣撶粏鑺傦紙鍏充簬閽╁瓙鐨勭粏鑺傝鍙傝 MSDN 搴撲腑鐨?SetWindowHookEx API錛夛紝浣嗘垜鍦ㄦ瑕佺粰鍑轟袱涓緢鏈夌敤蹇冨緱錛屽湪鐩稿叧鏂囨。涓綘鏄壘涓嶅埌榪欎簺鍐呭鐨勶細</p> <ol> <li>鍦ㄦ垚鍔熻皟鐢?SetWindowsHookEx 鍚庯紝緋葷粺鑷姩鏄犲皠 DLL 鍒伴挬瀛愪綔鐢ㄧ殑綰跨▼鍦板潃絀洪棿錛屼絾涓嶅繀绔嬪嵆鍙戠敓鏄犲皠錛屽洜涓?Windows 閽╁瓙閮芥槸娑堟伅錛孌LL 鍦ㄦ秷鎭簨浠跺彂鐢熷墠騫舵病鏈変駭鐢熷疄闄呯殑鏄犲皠銆備緥濡傦細<br>銆銆濡傛灉浣犲畨瑁呬竴涓挬瀛愮洃鎺ф煇浜涚嚎紼嬶紙WH_CALLWNDPROC錛夌殑闈為槦鍒楁秷鎭紝鍦ㄦ秷鎭瀹為檯鍙戦佸埌錛堟煇浜涚獥鍙g殑錛夐挬瀛愪綔鐢ㄧ殑綰跨▼涔嬪墠錛岃DLL 鏄笉浼氳鏄犲皠鍒拌繙紼嬭繘紼嬬殑銆傛崲鍙ヨ瘽璇達紝濡傛灉 UnhookWindowsHookEx 鍦ㄦ煇涓秷鎭鍙戦佸埌閽╁瓙浣滅敤鐨勭嚎紼嬩箣鍓嶈璋冪敤錛孌LL 鏍規湰涓嶄細琚槧灝勫埌榪滅▼榪涚▼錛堝嵆浣?SetWindowsHookEx 鏈韓璋冪敤鎴愬姛錛夈備負浜嗗己鍒惰繘琛屾槧灝勶紝鍦ㄨ皟鐢?SetWindowsHookEx 涔嬪悗椹笂鍙戦佷竴涓簨浠跺埌鐩稿叧鐨勭嚎紼嬨?br>銆銆鍦║nhookWindowsHookEx浜嗕箣鍚庯紝瀵逛簬娌℃湁鏄犲皠鐨凞LL澶勭悊鏂規硶涔熶竴鏍楓傚彧鏈夊湪瓚沖鐨勪簨浠跺彂鐢熷悗錛孌LL鎵嶄細鏈夌湡姝g殑鏄犲皠銆? <li>褰撲綘瀹夎閽╁瓙鍚庯紝瀹冧滑鍙兘褰卞搷鏁翠釜緋葷粺寰楁ц兘錛堝挨鍏舵槸緋葷粺綰ч挬瀛愶級錛屼絾鏄綘鍙互寰堝鏄撹В鍐寵繖涓棶棰橈紝濡傛灉浣犱嬌鐢ㄧ嚎紼嬩笓鐢ㄩ挬瀛愮殑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箞浼氬彂鐢熶粈涔堝憿錛熼鍏堟垜浠氳繃Windows 閽╁瓙灝咲LL鏄犲皠鍒拌繙紼嬭繘紼嬨傜劧鍚庯紝鍦―LL琚疄闄呮槧灝勪箣鍚庯紝鎴戜滑瑙e紑閽╁瓙銆傞氬父褰撶涓涓秷鎭埌杈鵑挬瀛愪綔鐢ㄧ嚎紼嬫椂錛孌LL姝ゆ椂涔熶笉浼氳鏄犲皠銆傝繖閲岀殑澶勭悊鎶宸ф槸璋冪敤LoadLibrary閫氳繃澧炲姞 DLLs鐨勫紩鐢ㄨ鏁版潵闃叉鏄犲皠涓嶆垚鍔熴?br>銆銆鐜板湪鍓╀笅鐨勯棶棰樻槸濡備綍鍗歌澆DLL錛孶nhookWindowsHookEx 鏄笉浼氬仛榪欎釜浜嬫儏鐨勶紝鍥犱負閽╁瓙宸茬粡涓嶄綔鐢ㄤ簬綰跨▼浜嗐備綘鍙互鍍忎笅闈㈣繖鏍峰仛錛?br><br> <ul> <li>灝卞湪浣犳兂瑕佽В闄LL鏄犲皠鍓嶏紝瀹夎鍙︿竴涓挬瀛愶紱 <li>鍙戦佷竴涓?#8220;鐗規畩”娑堟伅鍒拌繙紼嬬嚎紼嬶紱 <li>鍦ㄩ挬瀛愯繃紼嬩腑鎴幏榪欎釜娑堟伅錛屽搷搴旇娑堟伅鏃惰皟鐢?FreeLibrary 鍜?UnhookWindowsHookEx錛?/li> </ul> <p> </p> <p>銆銆鐩墠鍙嬌鐢ㄤ簡閽╁瓙鏉ヤ粠澶勭悊榪滅▼榪涚▼涓璂LL鐨勬槧灝勫拰瑙i櫎鏄犲皠銆傚湪姝?#8220;浣滅敤浜庣嚎紼嬬殑”閽╁瓙瀵規ц兘娌℃湁褰卞搷銆?br>涓嬮潰鎴戜滑灝嗚璁哄彟澶栦竴縐嶆柟娉曪紝榪欎釜鏂規硶涓?LoadLibrary 鎶鏈殑涓嶅悓涔嬪鏄疍LL鐨勬槧灝勬満鍒朵笉浼氬共棰勭洰鏍囪繘紼嬨傜浉瀵筁oadLibrary 鎶鏈紝榪欓儴鍒嗘弿榪扮殑鏂規硶閫傜敤浜?WinNT鍜學in9x銆?br>銆銆浣嗘槸錛屼粈涔堟椂鍊欎嬌鐢ㄨ繖涓妧宸у憿錛熺瓟妗堟槸褰揇LL蹇呴』鍦ㄨ繙紼嬭繘紼嬩腑椹葷暀杈冮暱鏃墮棿錛堝嵆濡傛灉浣犲瓙綾誨寲鏌愪釜灞炰簬鍙﹀涓涓繘紼嬬殑鎺т歡鏃訛級浠ュ強浣犳兂灝藉彲鑳藉皯鐨勫共娑夌洰鏍囪繘紼嬫椂銆傛垜鍦?HookSpy 涓病鏈変嬌鐢ㄥ畠錛屽洜涓烘敞鍏LL 鐨勬椂闂村茍涓嶉暱鈥斺旀敞鍏ユ椂闂村彧瑕佽凍澶熷緱鍒板瘑鐮佸嵆鍙傛垜鎻愪緵浜嗗彟澶栦竴涓緥瀛愮▼搴忊斺擧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鏄庯細</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浣嶅弬鏁幫紝榪斿洖鍊肩殑澶у皬閮界浉鍚屻備篃灝辨槸璇達紝鎴戜滑鍙互浼犻掍竴涓寚閽堝埌LoadLibrary/FreeLibrary 浣滀負鍒?CreateRemoteThread 鐨勭嚎紼嬩緥紼嬨備絾榪欓噷鏈変袱涓棶棰橈紝璇風湅涓嬮潰瀵笴reateRemoteThread 鐨勬弿榪幫細</p> <ol> <li>CreateRemoteThread 鐨?lpStartAddress 鍙傛暟蹇呴』琛ㄧず榪滅▼榪涚▼涓嚎紼嬩緥紼嬬殑寮濮嬪湴鍧銆? <li>濡傛灉浼犻掑埌 ThreadFunc 鐨勫弬鏁發pParameter鈥斺旇瑙i噴涓哄父瑙勭殑 32浣嶅鹼紙FreeLibrary灝嗗畠瑙i噴涓轟竴涓?HMODULE錛夛紝涓鍒嘜K銆備絾鏄紝濡傛灉 lpParameter 琚В閲婁負涓涓寚閽堬紙LoadLibraryA灝嗗畠瑙i噴涓轟竴涓覆鎸囬拡錛夈傚畠蹇呴』鎸囧悜榪滅▼榪涚▼鐨勬煇浜涙暟鎹?</li> </ol> <p>銆銆絎竴涓棶棰樺疄闄呬笂鏄敱瀹冭嚜宸辮В鍐崇殑銆侺oadLibrary 鍜?FreeLibray 涓や釜鍑芥暟閮藉湪 kernel32.dll 涓傚洜涓哄繀欏諱繚璇乲ernel32瀛樺湪騫朵笖鍦ㄦ瘡涓?#8220;甯歌”榪涚▼涓殑鍔犺澆鍦板潃瑕佺浉鍚岋紝LoadLibrary/FreeLibray 鐨勫湴鍧鍦ㄦ瘡涓繘紼嬩腑鐨勫湴鍧瑕佺浉鍚岋紝榪欏氨淇濊瘉浜嗘湁鏁堢殑鎸囬拡琚紶閫掑埌榪滅▼榪涚▼銆?br>銆銆絎簩涓棶棰樹篃寰堝鏄撹В鍐熾傚彧瑕侀氳繃 WriteProcessMemory 灝?DLL 妯″潡鍚嶏紙LoadLibrary闇瑕佺殑DLL妯″潡鍚嶏級鎷瘋礉鍒拌繙紼嬭繘紼嬪嵆鍙?/p> <p>鎵浠ワ紝涓轟簡浣跨敤CreateRemoteThread 鍜?LoadLibrary 鎶鏈紝闇瑕佹寜鐓т笅鍒楁楠ゆ潵鍋氾細</p> <ol> <li>鑾峰彇榪滅▼榪涚▼錛圤penProcess錛夌殑 HANDLE錛? <li>涓鴻繙紼嬭繘紼嬩腑鐨?DLL鍚嶅垎閰嶅唴瀛橈紙VirtualAllocEx錛夛紱 <li>灝?DLL 鍚嶏紝鍖呭惈鍏ㄨ礬寰勫悕錛屽啓鍏ュ垎閰嶇殑鍐呭瓨錛圵riteProcessMemory錛夛紱 <li>鐢?CreateRemoteThread 鍜?LoadLibrary. 灝嗕綘鐨凞LL鏄犲皠鍒拌繙紼嬭繘紼嬶紱 <li>絳夊緟鐩村埌綰跨▼緇堟錛圵aitForSingleObject錛夛紝涔熷氨鏄鐩村埌 LoadLibrary 璋冪敤榪斿洖銆傚彟涓縐嶆柟娉曟槸錛屼竴鏃?DllMain錛堢敤DLL_PROCESS_ATTACH璋冪敤錛夎繑鍥烇紝綰跨▼灝變細緇堟錛? <li>鑾峰彇榪滅▼綰跨▼鐨勯鍑轟唬鐮侊紙GetExitCodeThread錛夈傛敞鎰忚繖鏄竴涓?LoadLibrary 榪斿洖鐨勫鹼紝鍥犳鏄墍鏄犲皠 DLL 鐨勫熀鍦板潃錛圚MODULE錛夈?br>鍦ㄧ浜屾涓噴鏀懼垎閰嶇殑鍦板潃錛圴irtualFreeEx錛夛紱 <li>鐢?CreateRemoteThread 鍜?FreeLibrary浠庤繙紼嬭繘紼嬩腑鍗歌澆 DLL銆備紶閫掑湪絎叚姝ヨ幏鍙栫殑 HMODULE 鍙ユ焺鍒?FreeLibrary錛堥氳繃 CreateRemoteThread 鐨刲pParameter鍙傛暟錛夛紱 <li>娉ㄦ剰錛氬鏋滀綘娉ㄥ叆鐨?DLL 浜х敓浠諱綍鏂扮殑綰跨▼錛屼竴瀹氳鍦ㄥ嵏杞紻LL 涔嬪墠灝嗗畠浠兘緇堟鎺夛紱 <li>絳夊緟鐩村埌綰跨▼緇堟錛圵aitForSingleObject錛夛紱 </li> </ol> <p>銆銆姝ゅ錛屽鐞嗗畬鎴愬悗涓嶈蹇樹簡鍏抽棴鎵鏈夊彞鏌勶紝鍖呮嫭鍦ㄧ鍥涙鍜岀鍏鍒涘緩鐨勪袱涓嚎紼嬩互鍙婂湪絎竴姝ヨ幏鍙栫殑榪滅▼綰跨▼鍙ユ焺銆傜幇鍦ㄨ鎴戜滑鐪嬩竴涓?LibSpy 鐨勯儴鍒嗕唬鐮侊紝涓轟簡綆鍗曡搗瑙侊紝涓婅堪姝ラ鐨勫疄鐜扮粏鑺備腑鐨勯敊璇鐞嗕互鍙?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>銆銆鍒扮洰鍓嶄負姝紝鎴戜滑鍙璁轟簡鍏充簬濡備綍灝咲LL 娉ㄥ叆鍒拌繙紼嬭繘紼嬬殑鍐呭錛屼絾鏄紝鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝娉ㄥ叆鐨?DLL 閮介渶瑕佷笌鍘熷簲鐢ㄧ▼搴忚繘琛屾煇縐嶆柟寮忕殑閫氫俊錛堝洖鎯充竴涓嬶紝鎴戜滑鐨凞LL鏄鏄犲皠鍒版煇涓繙紼嬭繘紼嬬殑鍦板潃絀洪棿閲屼簡錛屼笉鏄湪鏈湴搴旂敤紼嬪簭鐨勫湴鍧絀洪棿涓級銆傛瘮濡傜瀵嗕睛嫻嬬▼搴忥紝DLL蹇呴』瑕佺煡閬撳疄闄呭寘鍚瘑鐮佺殑鎺т歡鍙ユ焺錛屾樉鐒訛紝緙栬瘧鏃舵棤娉曞皢榪欎釜鍊艱繘琛岀‖緙栫爜銆傚悓鏍鳳紝涓鏃LL鑾峰緱浜嗙瀵嗭紝瀹冨繀欏誨皢瀹冨彂閫佸洖鍘熷簲鐢ㄧ▼搴忥紝浠ヤ究鑳芥紜樉紺哄嚭鏉ャ?br>銆銆騫歌繍鐨勬槸錛屾湁璁稿鏂規硶澶勭悊榪欎釜闂錛屾枃浠舵槧灝勶紝WM_COPYDATA錛屽壀璐存澘浠ュ強寰堢畝鍗曠殑 #pragma data_seg 鍏變韓鏁版嵁孌電瓑錛屾湰鏂囨垜涓嶆墦綆椾嬌鐢ㄨ繖浜涙妧鏈紝鍥犱負MSDN錛?#8220;榪涚▼闂撮氫俊”閮ㄥ垎錛変互鍙婂叾瀹冩笭閬撳彲浠ユ壘鍒板緢澶氭枃妗e弬鑰冦備笉榪囨垜鍦?LibSpy渚嬪瓙涓繕鏄嬌鐢ㄤ簡 #pragma data_seg銆傜粏鑺傝鍙傝?LibSpy 婧愪唬鐮併? <p>絎笁閮ㄥ垎錛?a name=CreateRemoteThread_鍜宊WriteProcessMemory_鎶鏈?CreateRemoteThread 鍜?WriteProcessMemory 鎶鏈?/a></p> <p>鑼冧緥紼嬪簭鈥斺擶inSpy </p> <p>銆銆鍙﹀涓涓皢浠g爜鎷瘋礉鍒板彟涓涓繘紼嬪湴鍧絀洪棿騫跺湪璇ヨ繘紼嬩笂涓嬫枃涓墽琛岀殑鏂規硶鏄嬌鐢ㄨ繙紼嬬嚎紼嬪拰 WriteProcessMemory API銆傝繖縐嶆柟娉曚笉鐢ㄧ紪鍐欏崟鐙殑DLL錛岃屾槸鐢?WriteProcessMemory 鐩存帴灝嗕唬鐮佹嫹璐濆埌榪滅▼榪涚▼鈥斺旂劧鍚庣敤 CreateRemoteThread 鍚姩瀹冩墽琛屻傚厛鏉ョ湅鐪?CreateRemoteThread 鐨勫0鏄庯細 </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錛夌殑澹版槑錛屼綘浼氭敞鎰忓埌濡備笅鐨勫樊鍒細 <ul> <li>鍦?CreateRemoteThread涓紝hProcess鏄澶栫殑涓涓弬鏁幫紝涓涓繘紼嬪彞鏌勶紝鏂扮嚎紼嬪氨鏄湪榪欎釜榪涚▼涓垱寤虹殑錛? <li>鍦?CreateRemoteThread涓紝lpStartAddress 琛ㄧず鐨勬槸鍦ㄨ繙紼嬭繘紼嬪湴鍧絀洪棿涓殑綰跨▼璧峰鍦板潃銆傜嚎紼嬪嚱鏁板繀欏昏瀛樺湪浜庤繙紼嬭繘紼嬩腑錛屾墍浠ユ垜浠笉鑳界畝鍗曞湴浼犻掍竴涓寚閽堝埌鏈湴鐨?ThreadFunc銆傚繀欏誨緱鍏堟嫹璐濅唬鐮佸埌榪滅▼榪涚▼錛? <li>鍚屾牱錛宭pParameter 鎸囧悜鐨勬暟鎹篃蹇呴』瑕佸瓨鍦ㄤ簬榪滅▼榪涚▼錛屾墍浠ヤ篃寰楀皢瀹冩嫹璐濆埌閭c?</li> </ul> <p>緇間笂鎵榪幫紝鎴戜滑寰楁寜鐓у涓嬬殑姝ラ鏉ュ仛錛?/p> <ol> <li>鑾峰彇涓涓繙紼嬭繘紼嬬殑HANDLE (OpenProces) 錛? <li>鍦ㄨ繙紼嬭繘紼嬪湴鍧絀洪棿涓負娉ㄥ叆鐨勬暟鎹垎閰嶅唴瀛橈紙VirtualAllocEx錛夛紱 <li>灝嗗垵濮嬬殑 INDATA 鏁版嵁緇撴瀯鐨勪竴涓嫹璐濆啓鍏ュ垎閰嶇殑鍐呭瓨涓紙WriteProcessMemory錛夛紱 <li>鍦ㄨ繙紼嬭繘紼嬪湴鍧絀洪棿涓負娉ㄥ叆鐨勪唬鐮佸垎閰嶅唴瀛橈紱 <li>灝?ThreadFunc 鐨勪竴涓嫹璐濆啓鍏ュ垎閰嶇殑鍐呭瓨錛? <li>鐢?CreateRemoteThread鍚姩榪滅▼鐨?ThreadFunc 鎷瘋礉錛? <li>絳夊緟榪滅▼綰跨▼緇堟錛圵aitForSingleObject錛夛紱 <li>鑾峰彇榪滅▼鏉ヨ嚜榪滅▼榪涚▼鐨勭粨鏋滐紙ReadProcessMemory 鎴?GetExitCodeThread錛夛紱 <li>閲婃斁鍦ㄧ浜屾鍜岀鍥涙涓垎閰嶇殑鍐呭瓨錛圴irtualFreeEx錛夛紱 <li>鍏抽棴鍦ㄧ鍏鍜岀涓姝ヨ幏鍙栫殑鍙ユ焺錛圕loseHandle錛夛紱 </li> </ol> <p>ThreadFunc 蹇呴』瑕侀伒寰殑鍘熷垯錛?/p> <ol> <li>闄や簡kernel32.dll 鍜寀ser32.dll 涓殑鍑芥暟涔嬪錛孴hreadFunc 涓嶈璋冪敤浠諱綍鍏跺畠鍑芥暟錛屽彧鏈?kernel32.dll 鍜寀ser32.dll琚繚璇佸湪鏈湴鍜岀洰鏍囪繘紼嬩腑鐨勫姞杞藉湴鍧鐩稿悓錛堟敞鎰忥紝user32.dll騫朵笉鏄鏄犲皠鍒版瘡涓?Win32 鐨勮繘紼嬶級銆傚鏋滀綘闇瑕佹潵鑷叾瀹冨簱涓殑鍑芥暟錛屽皢LoadLibrary 鍜?GetProcAddress 鐨勫湴鍧浼犵粰娉ㄥ叆鐨勪唬鐮侊紝鐒跺悗鏀炬墜璁╁畠鑷繁鍘誨仛銆傚鏋滄槧灝勫埌鐩爣榪涚▼涓殑DLL鏈夊啿紿侊紝浣犱篃鍙互鐢?GetModuleHandle 鏉ヤ唬鏇?LoadLibrary銆?br>銆銆鍚屾牱錛屽鏋滀綘鎯沖湪 ThreadFunc 涓皟鐢ㄨ嚜宸辯殑瀛愪緥紼嬶紝瑕佸崟鐙妸姣忎釜渚嬬▼鐨勪唬鐮佹嫹璐濆埌榪滅▼榪涚▼騫剁敤 INJDATA涓?ThreadFunc 鎻愪緵浠g爜鐨勫湴鍧銆? <li>涓嶈浣跨敤闈欐佸瓧絎︿覆錛岃岃鐢?INJDATA 鏉ヤ紶閫掓墍鏈夊瓧絎︿覆銆備箣鎵浠ヨ榪欐牱錛屾槸鍥犱負緙栬瘧鍣ㄥ皢闈欐佸瓧絎︿覆鏀懼湪鍙墽琛岀▼搴忕殑“鏁版嵁孌?#8221;涓紝鍙槸寮曠敤錛堟寚閽堬級鏄繚鐣欏湪浠g爜涓殑銆傞偅涔堬紝榪滅▼榪涚▼涓璗hreadFunc 鐨勬嫹璐濇寚鍚戠殑鍐呭鍦ㄨ繙紼嬭繘紼嬬殑鍦板潃絀洪棿涓槸涓嶅瓨鍦ㄧ殑銆? <li>鍘繪帀 /GZ 緙栬瘧鍣ㄥ紑鍏籌紝瀹冨湪璋冭瘯鐗堟湰涓槸榛樿璁劇疆鐨勩? <li>灝?ThreadFunc 鍜?AfterThreadFunc 澹版槑涓洪潤鎬佺被鍨嬶紝鎴栬呬笉鍚敤澧為噺閾炬帴銆? <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>銆銆濡傛灉浣犳病鏈夋寜鐓ц繖浜涜鍒欐潵鍋氾紝鐩爣榪涚▼寰堝彲鑳戒細宕╂簝銆傛墍浠ュ姟蹇呯墷璁般傚湪鐩爣榪涚▼涓笉瑕佸亣璁句換浣曚簨鎯呴兘浼氬儚鍦ㄦ湰鍦拌繘紼嬩腑閭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錛氭帴鏀舵枃鏈殑緙撳啿鎸囬拡錛? 榪斿洖鍊鹼細榪斿洖鍊兼槸鎷瘋礉鐨勫瓧絎︽暟錛?/pre> <p>銆銆涓嬮潰璁╂垜浠湅鐪嬪畠鐨勯儴鍒嗕唬鐮佲斺斿挨鍏舵槸娉ㄥ叆鏁版嵁鐨勪唬鐮佲斺斾互渚挎槑鐧?GetWindowTextRemote 鐨勫伐浣滃師鐞嗐傛澶勪負綆鍗曡搗瑙侊紝鐣ユ帀浜?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鐨勮繘紼嬫潵璇達紝user32.dll鎬繪槸琚槧灝勫埌鐩稿悓鐨勫湴鍧錛屽洜姝わ紝SendMessageA 鐨勫湴鍧涔熻偗瀹氭槸鐩稿悓鐨勩傝繖灝變繚璇佷簡琚紶閫掑埌榪滅▼榪涚▼鐨勬槸涓涓湁鏁堢殑鎸囬拡銆?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鎸囬拡銆傚垢榪愮殑鏄垜鎵懼埌浜嗘湁涓や釜鏂規硶鏉ヨВ鍐寵繖涓棶棰橈紝鍙笉榪囪鍊熷姪姹囩紪璇█錛屾墍浠ヤ笉瑕佸拷鐣ヤ簡姹囩紪錛屽叧閿椂鍊欏畠鏄緢鏈夌敤鐨勶紒<br><br>鏂規硶涓錛?/p> <p>濡備笅鍥炬墍紺猴細</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 鐨勪唬鐮侊細 </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> 浣嗚繖閲岃繕鏈変竴涓棶棰橈紝瑙佺涓琛屼唬鐮侊細 <pre>INJDATA* pData = (INJDATA*) NewProc;</pre> <p>銆銆榪欑鏂瑰紡 pData寰楀埌鐨勬槸紜紪鐮佸鹼紙鍦ㄦ垜浠殑榪涚▼涓槸鍘?NewProc 鐨勫唴瀛樺湴鍧錛夈傝繖涓嶆槸鎴戜滑鍗佸垎鎯寵鐨勩傚湪榪滅▼榪涚▼涓紝NewProc “褰撳墠”鎷瘋礉鐨勫唴瀛樺湴鍧涓庡畠琚Щ鍒扮殑瀹為檯浣嶇疆鏄棤鍏崇殑錛屾崲鍙ヨ瘽璇達紝鎴戜滑浼氶渶瑕佹煇縐嶇被鍨嬬殑“this 鎸囬拡”銆?br>铏界劧鐢?C/C++ 鏃犳硶瑙e喅榪欎釜闂錛屼絾鍊熷姪鍐呰仈姹囩紪鍙互瑙e喅錛屼笅闈㈡槸瀵?NewProc鐨勪慨鏀癸細<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箞錛屾帴涓嬫潵璇ユ庝箞鍔炲憿錛熶簨瀹炰笂錛屾瘡涓繘紼嬮兘鏈変竴涓壒孌婄殑瀵勫瓨鍣紝瀹冩寚鍚戜笅涓鏉¤鎵ц鐨勬寚浠ょ殑鍐呭瓨浣嶇疆銆傚嵆鎵璋撶殑鎸囦護鎸囬拡錛屽湪32浣?Intel 鍜?AMD 澶勭悊鍣ㄤ笂琚〃紺轟負 EIP銆傚洜涓?EIP鏄竴涓笓鐢ㄥ瘎瀛樺櫒錛屼綘鏃犳硶璞℃搷浣滀竴鑸父瑙勫瓨鍌ㄥ櫒錛堝錛欵AX錛孍BX絳夛級閭f牱閫氳繃緙栫▼瀛樺彇瀹冦備篃灝辨槸璇存病鏈夋搷浣滀唬鐮佹潵瀵誨潃 EIP錛屼互渚跨洿鎺ヨ鍙栨垨淇敼鍏跺唴瀹廣備絾鏄紝EIP 浠嶇劧榪樻槸鍙互閫氳繃闂存帴鏂規硶淇敼鐨勶紙騫朵笖闅忔椂鍙互淇敼錛夛紝閫氳繃JMP錛孋ALL鍜孯ET榪欎簺鎸囦護瀹炵幇銆備笅闈㈡垜浠氨閫氳繃渚嬪瓙鏉ヨВ閲婇氳繃 CALL/RET 瀛愪緥紼嬭皟鐢ㄦ満鍒跺湪32浣?Intel 鍜?AMD 澶勭悊鍣ㄤ笂鏄浣曞伐浣滅殑銆?<br>銆銆褰撲綘璋冪敤錛堥氳繃 CALL錛夋煇涓瓙渚嬬▼鏃訛紝瀛愪緥紼嬬殑鍦板潃琚姞杞藉埌 EIP錛屼絾鍗充究鏄湪 EIP鏉慨鏀逛箣鍓嶏紝鍏舵棫鐨勯偅涓艱鑷姩PUSH鍒板爢鏍堬紙琚敤浜庡悗闈綔涓烘寚浠ゆ寚閽堣繑鍥烇級銆傚湪瀛愪緥紼嬫墽琛屽畬鏃訛紝RET 鎸囦護鑷姩灝嗗爢鏍堥《POP鍒?EIP銆?br>銆銆鐜板湪浣犵煡閬撲簡濡備綍閫氳繃 CALL 鍜?RET 瀹炵幇 EIP 鐨勪慨鏀癸紝浣嗗浣曡幏鍙栧叾褰撳墠鐨勫煎憿錛熶笅闈㈠氨鏉ヨВ鍐寵繖涓棶棰橈紝鍓嶉潰璁茶繃錛孋ALL PUSH EIP 鍒板爢鏍堬紝鎵浠ワ紝涓轟簡鑾峰彇鍏跺綋鍓嶅鹼紝璋冪敤“鍝戝嚱鏁?#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鎸囦護鐨勭湡姝e湴鍧錛? <li>娉ㄦ剰 NewProc 鐨勫叆鍙g偣鍜?“POP ECX”涔嬮棿鐨?#8220;璺濈”鏄? 涓瓧鑺傦紱鍥犳涓轟簡璁$畻 NewProc鐨勫湴鍧錛岃浠?ECX 鍑?銆?</li> </ul> <p>銆銆榪欐牱涓鏉ワ紝涓嶇 NewProc 琚Щ鍒頒粈涔堝湴鏂癸紝瀹冩昏兘璁$畻鍑哄叾鑷繁鐨勫湴鍧銆備絾鏄紝NewProc 鐨勫叆鍙g偣鍜?“POP ECX”涔嬮棿鐨勮窛紱誨彲鑳戒細闅忕潃浣犲緙栬瘧/閾炬帴閫夐」鐨勬敼鍙樿屽彉鍖栵紝鐢辨閫犳垚 RELEASE鍜孌EBUG鐗堟湰涔嬮棿涔熶細鏈夊樊鍒備絾鍏抽敭鏄綘浠嶇劧紜垏鍦扮煡閬撶紪璇戞椂鐨勫箋?/p> <ol> <li>棣栧厛錛岀紪璇戝嚱鏁? <li>鐢ㄥ弽姹囩紪紜畾姝g‘鐨勮窛紱? <li>鏈鍚庯紝鐢ㄦ紜殑璺濈鍊奸噸鏂扮紪璇?</li> </ol> <p>姝ゅ嵆涓?InjecEx 涓嬌鐢ㄧ殑瑙e喅鏂規錛岀被浼間簬 HookInjEx錛屼氦鎹㈤紶鏍囩偣鍑?#8220;寮濮?#8221;宸﹀彸閿椂鐨勫姛鑳姐?br><br>鏂規硶浜岋細 <p>瀵逛簬鎴戜滑鐨勯棶棰橈紝鍦ㄨ繙紼嬭繘紼嬪湴鍧絀洪棿涓皢 INJDATA 鏀懼湪 NewProc 鍓嶉潰涓嶆槸鍞竴鐨勮В鍐沖姙娉曘傜湅涓嬮潰 NewProc鐨勫彉寮傜増鏈細 </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 錛堜負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> 鍥犳錛屽叾緙栬瘧鐨勪唬鐮侊紙鍗佸叚榪涘埗錛夊皢鏄細 <pre>558BECC745FCD0C0B0A0......8BE55DC21000. </pre> 鐜板湪浣犲彲浠ヨ薄涓嬮潰榪欐牱緇х畫錛? <ol> <li>灝咺NJDATA錛孴hreadFunc鍜孨ewProc 鎷瘋礉鍒扮洰鏍囪繘紼嬶紱 <li>淇敼 NewProc 鐨勪唬鐮侊紝浠ヤ究 pData 涓繚瀛樼殑鏄?INJDATA 鐨勭湡瀹炲湴鍧銆?br>渚嬪錛屽亣璁?INJDATA 鐨勫湴鍧錛圴irtualAllocEx榪斿洖鐨勫鹼級鍦ㄧ洰鏍囪繘紼嬩腑鏄?0x008a0000銆傜劧鍚庤薄涓嬮潰榪欐牱淇敼NewProc鐨勪唬鐮侊細 <pre> 558BECC745FCD0C0B0A0......8BE55DC21000 <- 鍘熸潵鐨凬ewProc 錛堟敞1錛? 558BECC745FC00008A00......8BE55DC21000 <- 淇敼鍚庣殑NewProc錛屼嬌鐢ㄧ殑鏄疘NJDATA鐨勫疄闄呭湴鍧銆?/pre> 涔熷氨鏄錛屼綘鐢ㄧ湡姝g殑 INJDATA錛堟敞2錛?鍦板潃鏇夸唬浜嗚櫄鎷熷?A0B0C0D0錛堟敞2錛夈?<br> <li>寮濮嬫墽琛岃繙紼嬬殑 ThreadFunc錛屽畠璐熻矗瀛愮被鍖栬繙紼嬭繘紼嬩腑鐨勬帶浠躲?br></li> </ol> <ul> <li>娉?銆佹湁浜哄彲鑳戒細闂紝涓轟粈涔堝湴鍧 A0B0C0D0 鍜?008a0000 鍦ㄧ紪璇戞椂欏哄簭鏄浉鍙嶇殑銆傚洜涓?Intel 鍜?AMD 澶勭悊鍣ㄤ嬌鐢?little-endian 絎﹀彿鏉ヨ〃紺猴紙澶氬瓧鑺傦級鏁版嵁銆傛崲鍙ヨ瘽璇達紝鏌愪釜鏁板瓧鐨勪綆浣嶅瓧鑺傝瀛樺偍鍦ㄥ唴瀛樼殑鏈灝忓湴鍧澶勶紝鑰岄珮浣嶅瓧鑺傝瀛樺偍鍦ㄦ渶楂樹綅鍦板潃銆?br>鍋囪“UNIX”榪欎釜璇嶅瓨鍌ㄧ敤4涓瓧鑺傦紝鍦?big-endian 緋葷粺涓紝瀹冭瀛樹負“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鍑虹幇鍝曚竴涓佺偣閿欒錛屽緢瀹規槗灝辮錛堝茍涓旀渶澶у彲鑳藉湴浼氾級浣胯繙紼嬭繘紼嬪穿婧冿紙鍙傝闄勫綍 F錛夛紝鍥犱負璋冭瘯榪滅▼ ThreadFunc 灝嗘槸涓涓彲鎬曠殑姊﹂瓏錛屽彧鏈夊湪娉ㄥ叆鐨勬寚浠ゆ暟寰堝皯鏃訛紝浣犳墠搴旇鑰冭檻浣跨敤榪欑鎶鏈繘琛屾敞鍏ワ紝瀵逛簬澶у潡鐨勪唬鐮佹敞鍏ワ紝鏈濂界敤 I.鍜孖I 閮ㄥ垎璁ㄨ鐨勬柟娉曘?br><br>WinSpy 浠ュ強 InjectEx 璇蜂粠榪欓噷<a ><u><font color=#0000ff>涓嬭澆婧愪唬鐮?/font></u></a>銆?/p> <a name=緇撴潫璇?緇撴潫璇?/a> <p> </p> <p>鍒扮洰鍓嶄負姝紝鏈夊嚑涓棶棰樻槸鎴戜滑鏈彁鍙婄殑錛岀幇鎬葷粨濡備笅錛?/p> <table id=table1 width="91%" border=0> <tbody> <tr> <td align=middle width=387><strong>瑙e喅鏂規 </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>娉?錛氭樉鐒訛紝浣犳棤娉昲ook涓涓病鏈夋秷鎭槦鍒楃殑綰跨▼錛屾澶栵紝SetWindowsHookEx涓嶈兘涓庣郴緇熸湇鍔′竴璧峰伐浣滐紝鍗充嬌瀹冧滑涓?USER32.DLL 榪涜閾炬帴錛? <li>娉?錛歐in9x 涓病鏈?CreateRemoteThread錛屼篃娌℃湁 VirtualAllocEx 錛堝疄闄呬笂錛屽湪Win9x 涓彲浠ヤ豢鐪燂紝浣嗕笉鏄湰鏂囪璁虹殑闂浜嗭級錛? <li>娉?錛氭墍鏈夎繘紼?= 鎵鏈?Win32 榪涚▼ + csrss.exe<br>鏈湴搴旂敤 錛坰mss.exe, os2ss.exe, autochk.exe 絳夛級涓嶄嬌鐢?Win32 API錛屾墍浠ヤ篃涓嶄細涓?kernel32.dll 閾炬帴銆傚敮涓涓涓緥澶栨槸 csrss.exe錛學in32 瀛愮郴緇熸湰韜紝瀹冩槸鏈湴搴旂敤紼嬪簭錛屼絾鍏舵煇浜涘簱錛垀winsrv.dll錛夐渶瑕?Win32 DLLs錛屽寘鎷?kernel32.dll錛? <li>娉?錛氬鏋滀綘鎯寵灝嗕唬鐮佹敞鍏ュ埌緋葷粺鏈嶅姟涓紙lsass.exe, services.exe, winlogon.exe 絳夛級鎴朿srss.exe錛屽湪鎵撳紑榪滅▼鍙ユ焺錛圤penProcess錛変箣鍓嶏紝灝嗕綘鐨勮繘紼嬩紭鍏堢駭緗負 “SeDebugPrivilege”錛圓djustTokenPrivileges錛夈?</li> </ul> <p>銆銆鏈鍚庯紝鏈夊嚑浠朵簨鎯呬竴瀹氳浜嗙劧浜庡績錛氫綘鐨勬敞鍏ヤ唬鐮佸緢瀹規槗鎽ф瘉鐩爣榪涚▼錛屽挨鍏舵槸娉ㄥ叆浠g爜鏈韓鍑洪敊鐨勬椂鍊欙紝鎵浠ヨ璁頒綇錛氭潈鍔涘甫鏉ヨ矗浠伙紒<br>銆銆鍥犱負鏈枃涓殑璁稿渚嬪瓙鏄叧浜庡瘑鐮佺殑錛屼綘涔熻榪樿榪?Zhefu Zhang 鍐欑殑鍙﹀涓綃囨枃绔?#8220;<a target=_blank><u><font color=#0000ff>Super Password Spy++</font></u></a>” 錛屽湪璇ユ枃涓紝浠栬В閲婁簡濡備綍鑾峰彇IE 瀵嗙爜妗嗕腑鐨勫唴瀹癸紝姝ゅ錛屼粬榪樼ず鑼冧簡濡備綍淇濇姢浣犵殑瀵嗙爜鎺т歡鍏嶅彈綾諱技鐨勬敾鍑匯?/p> <p><a name=闄勫綍A>闄勫綍A</a>錛?/p> <p>涓轟粈涔?kernel32.dll 鍜寀ser32.dll 鎬繪槸琚槧灝勫埌鐩稿悓鐨勫湴鍧銆?br><br>銆銆鎴戠殑鍋囧畾錛氬洜涓篗icrosoft 鐨勭▼搴忓憳璁や負榪欐牱鍋氭湁鍔╀簬閫熷害浼樺寲錛屼負浠涔堝憿錛熸垜鐨勮В閲婃槸鈥斺旈氬父涓涓彲鎵ц紼嬪簭鏄敱鍑犱釜閮ㄥ垎緇勬垚錛屽叾涓寘鎷?#8220;.reloc” 銆傚綋閾炬帴鍣ㄥ垱寤?EXE 鎴栬?DLL鏂囦歡鏃訛紝瀹冨鏂囦歡琚槧灝勫埌鍝釜鍐呭瓨鍦板潃鍋氫簡涓涓亣璁俱傝繖灝辨槸鎵璋撶殑棣栭夊姞杞?鍩哄湴鍧銆傚湪鏄犲儚鏂囦歡涓墍鏈夌粷瀵瑰湴鍧閮芥槸鍩轟簬閾炬帴鍣ㄩ閫夌殑鍔犺澆鍦板潃錛屽鏋滅敱浜庢煇縐嶅師鍥狅紝鏄犲儚鏂囦歡娌℃湁琚姞杞藉埌璇ュ湴鍧錛岄偅涔堣繖鏃?#8220;.reloc”灝辮搗浣滅敤浜嗭紝瀹冨寘鍚槧鍍忔枃浠朵腑鐨勬墍鏈夊湴鍧鐨勬竻鍗曪紝榪欎釜娓呭崟涓殑鍦板潃鍙嶆槧浜嗛摼鎺ュ櫒棣栭夊姞杞藉湴鍧鍜屽疄闄呭姞杞藉湴鍧鐨勫樊鍒紙鏃犺濡備綍錛岃娉ㄦ剰緙栬瘧鍣ㄤ駭鐢熺殑澶у鏁版寚浠や嬌鐢ㄦ煇縐嶇浉瀵瑰湴鍧瀵誨潃錛屽洜姝わ紝騫舵病鏈変綘鎯寵薄鐨勯偅涔堝鍦板潃鍙緵閲嶆柊鍒嗛厤錛夛紝鍙︿竴鏂歸潰錛屽鏋滃姞杞藉櫒鑳藉鎸夌収閾炬帴鍣ㄩ閫夊湴鍧鍔犺澆鏄犲儚鏂囦歡錛岄偅涔?#8220;.reloc”灝辮瀹屽叏蹇界暐鎺変簡銆?br>銆銆浣唊ernel32.dll 鍜寀ser32.dll 鍙婂叾鍔犺澆鍦板潃涓轟綍瑕佷互榪欑鏂瑰紡鍔犺澆鍛紵鍥犱負姣忎竴涓?Win32 紼嬪簭閮介渶瑕乲ernel32.dll錛屽茍涓斿ぇ澶氭暟Win32 紼嬪簭涔熼渶瑕?user32.dll錛岄偅涔堟繪槸灝嗗畠浠紙kernel32.dll 鍜寀ser32.dll錛夋槧灝勫埌棣栭夊湴鍧鍙互鏀硅繘鎵鏈夊彲鎵ц紼嬪簭鐨勫姞杞芥椂闂淬傝繖鏍蜂竴鏉ワ紝鍔犺澆鍣ㄧ粷涓嶈兘淇敼kernel32.dll and user32.dll.涓殑浠諱綍錛堢粷瀵癸級鍦板潃銆傛垜浠敤涓嬮潰鐨勪緥瀛愭潵璇存槑錛?br>銆銆灝嗘煇涓簲鐢ㄧ▼搴?App.exe 鐨勬槧鍍忓熀鍦板潃璁劇疆鎴?KERNEL32鐨勫湴鍧錛?base:"0x77e80000"錛夋垨 USER32鐨勯閫夊熀鍦板潃錛?base:"0x77e10000"錛夛紝濡傛灉 App.exe 涓嶆槸浠?USER32 瀵煎叆鏂瑰紡鏉ヤ嬌鐢?USER32錛岃屾槸閫氳繃LoadLibrary 鍔犺澆錛岄偅涔堢紪璇戝茍榪愯App.exe 鍚庯紝浼氭姤鍑洪敊璇俊鎭紙"Illegal System DLL Relocation"鈥斺旈潪娉曠郴緇烡LL鍦板潃閲嶅垎閰嶏級錛孉pp.exe 鍔犺澆澶辮觸銆?br>涓轟粈涔堜細榪欐牱鍛紵褰撳垱寤鴻繘紼嬫椂錛學in 2000銆乄in XP 鍜學in 2003緋葷粺鐨勫姞杞藉櫒瑕佹鏌?kernel32.dll 鍜寀ser32.dll 鏄惁琚槧灝勫埌棣栭夊熀鍦板潃錛堝疄闄呬笂錛屽畠浠殑鍚嶅瓧閮借紜紪鐮佽繘浜嗗姞杞藉櫒錛夛紝濡傛灉娌℃湁琚姞杞藉埌棣栭夊熀鍦板潃錛屽皢鍙戝嚭閿欒銆傚湪 WinNT4涓紝涔熶細媯鏌le32.dll錛屽湪WinNT 3.51 鍜岃緝浣庣増鏈殑Windows涓紝鐢變簬涓嶄細鍋氳繖鏍風殑媯鏌ワ紝鎵浠ernel32.dll 鍜寀ser32.dll鍙互琚姞杞戒換浣曞湴鏂廣傚彧鏈塶tdll.dll鎬繪槸琚姞杞藉埌鍏跺熀鍦板潃錛屽姞杞藉櫒涓嶈繘琛屾鏌ワ紝涓鏃tdll.dll娌℃湁鍦ㄥ叾鍩哄湴鍧錛岃繘紼嬪氨鏃犳硶鍒涘緩銆?br><br>鎬諱箣錛屽浜?WinNT 4 鍜岃緝楂樼殑鐗堟湰涓?/p> <ul> <li>涓瀹氳琚姞杞藉埌鍩哄湴鍧鐨凞LLs 鏈夛細kernel32.dll銆乽ser32.dll 鍜宯tdll.dll錛? <li>姣忎釜Win32 紼嬪簭閮借浣跨敤鐨?DLLs+ csrss.exe錛歬ernel32.dll 鍜宯tdll.dll錛? <li>姣忎釜榪涚▼閮借浣跨敤鐨凞LL鍙湁涓涓紝鍗充嬌鏄湰鍦板簲鐢細ntdll.dll錛?</li> </ul> <p><a name=闄勫綍B>闄勫綍B</a>錛?/p> <p>/GZ 緙栬瘧鍣ㄥ紑鍏?/p> <p>銆銆鍦ㄧ敓鎴?Debug 鐗堟湰鏃訛紝/GZ 緙栬瘧鍣ㄧ壒鎬ф槸榛樿鎵撳紑鐨勩備綘鍙互鐢ㄥ畠鏉ユ崟鑾鋒煇浜涢敊璇紙鍏蜂綋緇嗚妭璇峰弬鑰冪浉鍏蟲枃妗o級銆備絾瀵規垜浠殑鍙墽琛岀▼搴忔剰鍛崇潃浠涔堝憿錛?br>銆銆褰撴墦寮 /GZ 寮鍏籌紝緙栬瘧鍣ㄤ細娣誨姞涓浜涢澶栫殑浠g爜鍒板彲鎵ц紼嬪簭涓瘡涓嚱鏁版墍鍦ㄧ殑鍦版柟錛屽寘鎷竴涓嚱鏁拌皟鐢紙琚姞鍒版瘡涓嚱鏁扮殑鏈鍚庯級鈥斺旀鏌ュ凡緇忚鎴戜滑鐨勫嚱鏁頒慨鏀圭殑 ESP鍫嗘爤鎸囬拡銆備粈涔堬紒闅鵑亾鏈変竴涓嚱鏁拌皟鐢ㄨ娣誨姞鍒?ThreadFunc 鍚楋紵閭e皢瀵艱嚧鐏鵑毦銆俆hreadFunc 鐨勮繙紼嬫嫹璐濆皢璋冪敤涓涓湪榪滅▼榪涚▼涓笉瀛樺湪鐨勫嚱鏁幫紙鑷沖皯鏄湪鐩稿悓鐨勫湴鍧絀洪棿涓笉瀛樺湪錛?/p> <a name=闄勫綍C>闄勫綍C</a>錛? <p> </p> <p>闈欐佸嚱鏁板拰澧為噺閾炬帴</p> <p>銆銆澧為噺閾炬帴涓昏浣滅敤鏄湪鐢熸垚搴旂敤紼嬪簭鏃剁緝鐭摼鎺ユ椂闂淬傚父瑙勯摼鎺ュ拰澧為噺閾炬帴鐨勫彲鎵ц紼嬪簭涔嬮棿鐨勫樊鍒槸鈥斺斿閲忛摼鎺ユ椂錛屾瘡涓嚱鏁拌皟鐢ㄧ粡鐢變竴涓澶栫殑JMP鎸囦護錛岃鎸囦護鐢遍摼鎺ュ櫒鍙戝嚭錛堣瑙勫垯鐨勪竴涓緥澶栨槸鍑芥暟澹版槑涓洪潤鎬侊級銆傝繖浜?JMP 鎸囦護鍏佽閾炬帴鍣ㄥ湪鍐呭瓨涓Щ鍔ㄥ嚱鏁幫紝榪欑縐誨姩鏃犻渶淇敼寮曠敤鍑芥暟鐨?CALL鎸囦護銆備絾榪欎簺JMP鎸囦護涔熺‘瀹炲鑷翠簡涓浜涢棶棰橈細濡?ThreadFunc 鍜?AfterThreadFunc 灝嗘寚鍚慗MP鎸囦護鑰屼笉鏄疄闄呯殑浠g爜銆傛墍浠ュ綋璁$畻ThreadFunc 鐨勫ぇ灝忔椂錛?</p> <pre>const int cbCodeSize = ((LPBYTE) AfterThreadFunc - (LPBYTE) ThreadFunc) </pre> 銆銆浣犲疄闄呬笂璁$畻鐨勬槸鎸囧悜 ThreadFunc 鐨凧MPs 鍜孉fterThreadFunc涔嬮棿鐨?#8220;璺濈” 錛堥氬父瀹冧滑浼氱揣鎸ㄧ潃錛屼笉鐢ㄨ冭檻璺濈闂錛夈傜幇鍦ㄥ亣璁?ThreadFunc 鐨勫湴鍧浣嶄簬004014C0 鑰屼即闅忕殑 JMP鎸囦護浣嶄簬 00401020銆? <pre>:00401020 jmp 004014C0 ... :004014C0 push EBP ; ThreadFunc 鐨勫疄闄呭湴鍧 :004014C1 mov EBP, ESP ... </pre> 閭d箞 <pre>WriteProcessMemory( .., &ThreadFunc, cbCodeSize, ..); </pre> 銆銆灝嗘嫹璐?#8220;JMP 004014C0”鎸囦護錛堜互鍙婇殢鍚巆bCodeSize鑼冨洿鍐呯殑鎵鏈夋寚浠わ級鍒拌繙紼嬭繘紼嬧斺斾笉鏄疄闄呯殑 ThreadFunc銆傝繙紼嬭繘紼嬭鎵ц鐨勭涓浠朵簨鎯呭皢鏄?#8220;JMP 004014C0” 銆傚畠灝嗕細鍦ㄥ叾鏈鍚庡嚑鏉℃寚浠ゅ綋涓斺旇繙紼嬭繘紼嬪拰鎵鏈夎繘紼嬪潎濡傛銆備絾 JMP鎸囦護鐨勮繖涓?#8220;瑙勫垯”涔熸湁渚嬪銆傚鏋滄煇涓嚱鏁拌澹版槑涓洪潤鎬佺殑錛屽畠灝嗕細琚洿鎺ヨ皟鐢紝鍗充嬌澧為噺閾炬帴涔熸槸濡傛銆傝繖灝辨槸涓轟粈涔堣鍒?4瑕佸皢 ThreadFunc 鍜?AfterThreadFunc 澹版槑涓洪潤鎬佹垨紱佺敤澧為噺閾炬帴鐨勭紭鏁呫傦紙鏈夊叧澧為噺閾炬帴鐨勫叾瀹冧俊鎭弬瑙?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涓瓧鑺傦紙鏇寸簿紜湴璇達紝鍦ㄥ嚱鏁板紑濮嬪錛夈備緥濡傦紝涓嬮潰榪欎釜鍑芥暟錛?</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浠ヤ笂灞閮ㄥ彉閲忓唴瀛樼┖闂村張浼氭庝箞鏍峰憿錛熷叾瀹烇紝鍫嗘爤鎸囬拡騫朵笉鏄鐩存帴淇敼錛岃屾槸閫氳繃鍙︿竴涓嚱鏁拌皟鐢ㄦ潵淇敼鐨勩傚氨鏄繖涓澶栫殑鍑芥暟璋冪敤浣垮緱鎴戜滑鐨?ThreadFunc “琚牬鍧?#8221;浜嗭紝鍥犱負鍏惰繙紼嬫嫹璐濅細璋冪敤涓涓笉瀛樺湪鐨勪笢瑗褲?br>銆銆鎴戜滑鐪嬬湅鏂囨。涓鍫嗘爤鎺㈡祴鍜?/Gs緙栬瘧鍣ㄩ夐」鏄庝箞璇寸殑錛?br>鈥斺?#8220;/GS鏄竴涓帶鍒跺爢鏍堟帰嫻嬬殑楂樼駭鐗規э紝鍫嗘爤鎺㈡祴鏄竴緋誨垪緙栬瘧鍣ㄦ彃鍏ュ埌姣忎釜鍑芥暟璋冪敤鐨勪唬鐮併傚綋鍑芥暟琚縺媧繪椂錛屽爢鏍堟帰嫻嬮渶瑕佺殑鍐呭瓨絀洪棿鏉ュ瓨鍌ㄧ浉鍏沖嚱鏁扮殑灞閮ㄥ彉閲忋?br>銆銆濡傛灉鍑芥暟闇瑕佺殑絀洪棿澶т簬涓哄眬閮ㄥ彉閲忓垎閰嶇殑鍫嗘爤絀洪棿錛屽叾鍫嗘爤鎺㈡祴琚縺媧匯傞粯璁ょ殑澶у皬鏄竴涓〉闈紙鍦?0x86澶勭悊鍣ㄤ笂4kb錛夈傝繖涓煎厑璁稿湪Win32 搴旂敤紼嬪簭鍜學indows NT铏氭嫙鍐呭瓨綆$悊鍣ㄤ箣闂磋繘琛岃皚鎱庤皟鏁翠互渚垮鍔犺繍琛屾椂鎵胯緇欑▼搴忓爢鏍堢殑鍐呭瓨銆?#8221;<br>鎴戠‘淇℃湁浜轟細闂細鏂囨。涓殑“……鍫嗘爤鎺㈡祴鍒頒竴鍧楅渶瑕佺殑鍐呭瓨絀洪棿鏉ュ瓨鍌ㄧ浉鍏沖嚱鏁扮殑灞閮ㄥ彉閲?#8230;…”閭d簺緙栬瘧鍣ㄩ夐」錛堝畠浠殑鎻忚堪錛夊湪浣犲畬鍏ㄥ紕鏄庣櫧涔嬪墠鏈夋椂鐪熺殑璁╀漢姘旀劋銆備緥濡傦紝濡傛灉鏌愪釜鍑芥暟闇瑕?2KB鐨勫眬閮ㄥ彉閲忓瓨鍌ㄧ┖闂達紝鍫嗘爤鍐呭瓨灝嗚繘琛屽涓嬫柟寮忕殑鍒嗛厤錛堟洿綺劇‘鍦拌鏄?#8220;鎵胯” 錛夈? <pre>sub esp, 0x1000 ; "鍒嗛厤" 絎竴嬈?4 Kb test [esp], eax ; 鎵胯涓涓柊欏靛唴瀛橈紙濡傛灉榪樻病鏈夋壙璇猴級 sub esp, 0x1000 ; "鍒嗛厤" 絎簩嬈? Kb test [esp], eax ; ... sub esp, 0x1000 test [esp], eax </pre> 銆銆娉ㄦ剰4KB鍫嗘爤鎸囬拡鏄浣曡淇敼鐨勶紝鏇撮噸瑕佺殑鏄紝姣忎竴姝ヤ箣鍚庡爢鏍堝簳鏄浣曡“瑙﹀強”錛堣緇忚繃媯鏌ワ級銆傝繖鏍蜂繚璇佸湪“鍒嗛厤”錛堟壙璇猴級鍙︿竴欏甸潰涔嬪墠錛屽綋鍓嶉〉闈㈡壙璇虹殑鑼冨洿涔熷寘鍚爢鏍堝簳銆? <p>娉ㄦ剰浜嬮」<br>銆銆“姣忎竴涓嚎紼嬪埌杈懼叾鑷繁鐨勫爢鏍堢┖闂達紝榛樿鎯呭喌涓嬶紝姝ょ┖闂寸敱鎵胯鐨勪互鍙婇鐣欑殑鍐呭瓨緇勬垚錛屾瘡涓嚎紼嬩嬌鐢?1 MB棰勭暀鐨勫唴瀛橈紝浠ュ強涓欏墊壙璇虹殑鍐呭瓨錛岀郴緇熷皢鏍規嵁闇瑕佷粠棰勭暀鐨勫爢鏍堝唴瀛樹腑鎵胯涓欏靛唴瀛樺尯鍩?#8221; 錛堝弬瑙?MSDN CreateThread > dwStackSize > Thread Stack Size錛?br>銆銆榪樺簲璇ユ竻妤氫負浠涔堟湁鍏熾/GS 鐨勬枃。璇村湪鍫嗘爤鎺㈤拡鍦 Win32 搴旂敤紼嬪簭鍜學indows NT铏氭嫙鍐呭瓨綆$悊鍣ㄤ箣闂磋繘琛岃皚鎱庤皟鏁淬?br><br>鐜板湪鍥炲埌鎴戜滑鐨凾hreadFunc浠ュ強 4KB 闄愬埗<br>銆銆铏界劧浣犲彲浠ョ敤 /Gs 闃叉璋冪敤鍫嗘爤鎺㈡祴渚嬬▼錛屼絾鍦ㄦ枃妗e浜庤繖鏍風殑鍋氭硶緇欏嚭浜嗚鍛婏紝姝ゅ錛屾枃浠舵弿榪板彲浠ョ敤 #pragma check_stack 鎸囦護鍏抽棴鎴栨墦寮鍫嗘爤鎺㈡祴銆備絾鏄繖涓寚浠ゅソ鍍忎竴鐐逛綔鐢ㄩ兘娌℃湁錛堣涔堣繖涓枃妗f槸鍨冨溇錛岃涔堟垜鐤忓拷浜嗗叾瀹冧竴浜涗俊鎭紵錛夈傛諱箣錛孋reateRemoteThread 鍜?WriteProcessMemory 鎶鏈彧鑳界敤浜庢敞鍏ュ皬鍧椾唬鐮侊紝鎵浠ヤ綘鐨勫眬閮ㄥ彉閲忓簲璇ュ敖閲忓皯鑰楄垂涓浜涘唴瀛樺瓧鑺傦紝鏈濂戒笉瑕佽秴榪?4KB闄愬埗銆?/p> <a name=闄勫綍E>闄勫綍E</a>錛? <p> </p> <p>涓轟粈涔堣灝嗗紑鍏寵鍙ユ媶鍒嗘垚涓変釜浠ヤ笂?</p> <p>鐢ㄤ笅闈㈣繖涓緥瀛愬緢瀹規槗瑙i噴榪欎釜闂錛屽亣璁炬湁濡備笅榪欎箞涓涓嚱鏁幫細 </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> 緙栬瘧鍚庡彉鎴愪笅闈㈣繖涓牱瀛愶細 <pre>鍦板潃 鎿嶄綔鐮?鍙傛暟 瑙i噴鍚庣殑鎸囦護 -------------------------------------------------- ; 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>銆銆涓庡叾鍗曠嫭媯鏌ユ瘡涓狢ASE璇彞錛屼笉濡傚垱寤轟竴涓湴鍧琛紝鐒跺悗閫氳繃綆鍗曞湴璁$畻鍦板潃琛ㄧ殑鍋忕Щ閲忚岃煩杞埌姝g‘鐨凜ASE璇彞銆傝繖瀹為檯涓婃槸涓縐嶆敼榪涖傚亣璁句綘鏈?0涓狢ASE璇彞銆傚鏋滀笉浣跨敤涓婅堪鐨勬妧宸э紝浣犲緱鎵ц50嬈?CMP鍜孞MP鎸囦護鏉ヨ揪鍒版渶鍚庝竴涓狢ASE銆傜浉鍙嶏紝鏈変簡鍦板潃琛ㄥ悗錛屼綘鍙互閫氳繃琛ㄦ煡璇㈣煩杞埌浠諱綍CASE璇彞錛屼粠璁$畻鏈虹畻娉曡搴﹀拰鏃墮棿澶嶆潅搴︾湅錛屾垜浠敤O(5)浠f浛浜哋(2n)綆楁硶銆傚叾涓細 <ol> <li>O琛ㄧず鏈鍧忕殑鏃墮棿澶嶆潅搴︼紱 <li>鎴戜滑鍋囪闇瑕?鏉℃寚浠ゆ潵榪涜琛ㄦ煡璇㈣綆楀亸縐婚噺錛屾渶緇堣煩鍒扮浉搴旂殑鍦板潃錛?</li> </ol> <p>銆銆鐜板湪錛屼綘涔熻璁や負鍑虹幇涓婅堪鎯呭喌鍙槸鍥犱負CASE甯擱噺琚湁鎰忛夋嫨涓鴻繛緇殑錛?錛?錛?錛?錛夈傚垢榪愮殑鏄紝瀹冪殑榪欎釜鏂規鍙互搴旂敤浜庡ぇ澶氭暟鐜板疄渚嬪瓙涓紝鍙湁鍋忕Щ閲忕殑璁$畻紼嶅井鏈変簺澶嶆潅銆備絾鏈変袱涓緥澶栵細</p> <ul> <li>濡傛灉CASE璇彞灝戜簬絳変簬涓変釜錛? <li>濡傛灉CASE 甯擱噺瀹屽叏浜掍笉鐩稿叧錛堝錛?#8220;"case 1” 錛?#8220;case 13” 錛?#8220;case 50” 錛?鍜?#8220;case 1000” 錛夛紱 </li> </ul> <p>銆銆鏄劇劧錛屽崟鐙垽鏂瘡涓殑CASE甯擱噺鐨勮瘽錛岀粨鏋滀唬鐮佺箒鐞愯楁椂錛屼絾浣跨敤CMP鍜孞MP鎸囦護鍒欎嬌寰楃粨鏋滀唬鐮佺殑鎵ц灝卞儚鏅氱殑if-else 璇彞銆?br>鏈夎叮鐨勫湴鏂癸細濡傛灉浣犱笉鏄庣櫧CASE璇彞浣跨敤甯擱噺琛ㄨ揪寮忕殑鐞嗙敱錛岄偅涔堢幇鍦ㄥ簲璇ュ紕鏄庣櫧浜嗗惂銆備負浜嗗垱寤哄湴鍧琛紝鏄劇劧鍦ㄧ紪璇戞椂灝卞簲璇ョ煡閬撶浉鍏沖湴鍧銆?/p> <p>鐜板湪鍥炲埌闂錛?br>娉ㄦ剰鍒板湴鍧 0040100C 澶勭殑JMP鎸囦護浜嗗悧錛熸垜浠潵鐪嬬湅Intel鍏充簬鍗佸叚榪涘埗鎿嶄綔鐮?FF 鐨勬枃妗f槸鎬庝箞璇寸殑錛?/p> <pre>鎿嶄綔鐮併鎸囦護 銆銆銆銆鎻忚堪 FF /4 銆JMP r/m32 銆Jump near, absolute indirect, 銆銆銆銆銆銆銆銆銆銆銆address given in r/m32</pre> <p>銆銆鍘熸潵JMP 浣跨敤浜嗕竴縐嶇粷瀵瑰鍧鏂瑰紡錛屼篃灝辨槸璇達紝瀹冪殑鎿嶄綔鏁幫紙CASE璇彞涓殑 0040102C錛夎〃紺轟竴涓粷瀵瑰湴鍧銆傝繕鐢ㄦ垜璇翠粈涔堝悧錛熻繙紼?ThreadFunc 浼氱洸鐩湴璁や負鍦板潃琛ㄤ腑寮鍏沖湴鍧鏄?0040102C錛孞MP鍒頒竴涓敊璇殑鍦版柟錛岄犳垚榪滅▼榪涚▼宕╂簝銆?</p> <a name=闄勫綍F>闄勫綍F</a>錛? <p> </p> <p>涓轟粈涔堣繙紼嬭繘紼嬩細宕╂簝鍛紵</p> <p>褰撹繙紼嬭繘紼嬪穿婧冩椂錛屽畠鎬繪槸浼氬洜涓轟笅闈㈣繖浜涘師鍥狅細</p> <ol> <li>鍦═hreadFunc 涓紩鐢ㄤ簡涓涓笉瀛樺湪鐨勪覆錛? <li>鍦ㄥ湪ThreadFunc 涓?涓竴涓垨澶氫釜鎸囦護浣跨敤緇濆瀵誨潃錛堝弬瑙侀檮褰旹錛夛紱 <li>ThreadFunc 璋冪敤鏌愪釜涓嶅瓨鍦ㄧ殑鍑芥暟錛堣璋冪敤鍙兘鏄紪璇戝櫒鎴栭摼鎺ュ櫒娣誨姞鐨勶級銆備綘鍦ㄥ弽姹囩紪鍣ㄤ腑鍙互鐪嬪埌榪欐牱鐨勬儏褰細 <pre>:004014C0 push EBP ; ThreadFunc 鐨勫叆鍙g偣 :004014C1 mov EBP, ESP ... :004014C5 call 0041550 ; 榪欓噷灝嗕嬌榪滅▼榪涚▼宕╂簝 ... :00401502 ret </pre> 濡傛灉 CALL 鏄敱緙栬瘧鍣ㄦ坊鍔犵殑鎸囦護錛堝洜涓烘煇浜?#8220;紱佸繉” 寮鍏沖/GZ鏄墦寮鐨勶級錛屽畠灝嗚瀹氫綅鍦?ThreadFunc 鐨勫紑濮嬬殑鏌愪釜鍦版柟鎴栬呯粨灝懼銆?</li> </ol> <p>銆銆涓嶇鍝鎯呭喌錛屼綘閮借灝忓績緲肩考鍦頒嬌鐢?CreateRemoteThread 鍜?WriteProcessMemory 鎶鏈傚挨鍏惰娉ㄦ剰浣犵殑緙栬瘧鍣?閾炬帴鍣ㄩ夐」錛屼竴涓嶅皬蹇冨畠浠氨浼氬湪 ThreadFunc 娣誨姞鍐呭銆?</p> <img src ="http://m.shnenglu.com/road420/aggbug/126755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/road420/" target="_blank">娣遍們鑰?/a> 2010-09-16 14:06 <a href="http://m.shnenglu.com/road420/archive/2010/09/16/126755.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>CreateRemoteThread http://m.shnenglu.com/road420/archive/2010/09/16/126754.html娣遍們鑰?/dc:creator>娣遍們鑰?/author>Thu, 16 Sep 2010 06:05:00 GMThttp://m.shnenglu.com/road420/archive/2010/09/16/126754.htmlhttp://m.shnenglu.com/road420/comments/126754.htmlhttp://m.shnenglu.com/road420/archive/2010/09/16/126754.html#Feedback0http://m.shnenglu.com/road420/comments/commentRss/126754.htmlhttp://m.shnenglu.com/road420/services/trackbacks/126754.htmlCreateRemoteThread鎻愪緵浜嗕竴涓湪榪滅▼榪涚▼涓墽琛屼唬鐮佺殑鏂規硶,灝卞儚浠g爜闀垮嚭緲呰唨椋炲埌鍒榪愯銆傛湰鏂囧皢鍋氫竴涓叆闂ㄤ粙緇嶏紝甯屾湜瀵瑰箍澶х紪紼嬬埍濂借呮湁鎵甯姪銆?

鍏堣В閲婁竴涓嬭繙紼嬭繘紼嬶紝鍏跺疄灝辨槸瑕佹鍏ヤ綘鐨勪唬鐮佺殑榪涚▼錛岀浉瀵逛簬浣犵殑宸ヤ綔榪涚▼錛堝鏋滃彨鏈湴榪涚▼鐨勮瘽錛夊畠灝卞彨榪滅▼榪涚▼錛屽彲鐞嗚В涓哄涓匯?/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
[杈撳嚭] 綰跨▼韜喚鏍囧織錛屽鏋滀負NULL,鍒欎笉榪斿洖

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

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


絎竴縐嶆柟寮?

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

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

璁$畻鍣ㄤ負鐩爣榪涚▼銆?br>static DWORD WINAPI MyFunc (LPVOID pData)
{
//do something
//...
//pData杈撳叆欏瑰彲浠ユ槸浠諱綍綾誨瀷鍊?br>//榪欓噷鎴戜滑浼氫紶鍏ヤ竴涓狣WORD鐨勫煎仛紺轟緥錛屽茍涓旂畝鍗曡繑鍥?br>return *(DWORD*)pData;
}
static void AfterMyFunc (void) {
}
榪欓噷鏈変釜灝忔妧宸э紝瀹氫箟浜嗕竴涓猻tatic void AfterMyFunc (void)錛涗負浜嗕笅闈㈢‘瀹氭垜浠殑浠g爜澶у皬

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

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

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

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

鍐橮AGE_READWRITE錛屽綋鐒朵篃鍙涓哄彧璇葷瓑鍏跺畠鏍囧織錛岃繖閲屽氨涓嶄竴涓璇存槑浜嗐?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浣滀負鐩爣鎵ц鍑芥暟.

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

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

 


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



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

 

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

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

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

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

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

#pragma data_seg()



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

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

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



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

#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鎴愪負榪涚▼鐨勪竴閮ㄥ垎錛屼互榪欎釜榪涚▼鐨勮韓浠芥墽琛岋紝浣跨敤榪欎釜榪涚▼鐨勫爢鏍堛?榪欓」鎶鏈張鍙玞ode Injection鎶鏈紝琚箍娉涘湴搴旂敤鍦ㄤ簡鐥呮瘨銆侀粦瀹㈤鍩燂紒鍛靛懙^_^)



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

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. (娉ㄦ剰: 鍗充嬌鏄叏灞鍙橀噺鍜岄潤鎬佸彉閲忎篃閮戒笉鏄叡浜殑!) 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鎸囦護鏉ユ寚瀹氾紝涔熷彲浠ュ湪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.



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

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

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

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

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

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

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

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

(4)#pragma hdrstop

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

(5)#pragma resource

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

(6)#pragma warning

#pragma warning( disable : 4507 34; once : 4385; error : 164 )
絳変環浜庯細
#pragma warning(disable:4507 34) // 涓嶆樉紺?507鍜?4鍙瘋鍛婁俊鎭?br>#pragma warning(once:4385) // 4385鍙瘋鍛婁俊鎭粎鎶ュ憡涓嬈?br>#pragma warning(error:164) // 鎶?64鍙瘋鍛婁俊鎭綔涓轟竴涓敊璇?br>鍚屾椂榪欎釜pragma warning 涔熸敮鎸佸涓嬫牸寮忥細
#pragma warning( push [ ,n ] )
#pragma warning( pop )
榪欓噷n浠h〃涓涓鍛婄瓑綰?1---4)銆?br>#pragma warning( push )淇濆瓨鎵鏈夎鍛婁俊鎭殑鐜版湁鐨勮鍛婄姸鎬併?br>#pragma warning( push, n)淇濆瓨鎵鏈夎鍛婁俊鎭殑鐜版湁鐨勮鍛婄姸鎬侊紝騫朵笖鎶婂叏灞璀﹀憡絳夌駭璁懼畾涓簄銆?br>#pragma warning( pop )鍚戞爤涓脊鍑烘渶鍚庝竴涓鍛婁俊鎭紝鍦ㄥ叆鏍堝拰鍑烘爤涔嬮棿鎵浣滅殑涓鍒囨敼鍔ㄥ彇娑堛備緥濡傦細
#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鏉ュ疄鐜扮殑鏂規硶錛屽緢鏄畝媧佷究鍒┿?/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紼嬪簭鐨勫湴鍧絀洪棿鍛ㄥ洿絳戜簡涓閬撳銆傞氬父錛屼竴涓▼搴忕殑鍦板潃絀洪棿涓殑鏁版嵁鏄鏈夌殑錛屽鍒殑紼嬪簭鑰岃█鏄笉鍙鐨勩備絾鏄墽琛孲TRPROG鐨勫涓墽琛屽疄浣撹〃紺轟簡STRLIB鍦ㄧ▼搴忕殑鎵鏈夋墽琛屽疄浣撲箣闂村叡浜暟鎹槸姣棤闂鐨勩傚綋鎮ㄥ湪涓涓猄TRPROG紿楀彛涓鍔犳垨鑰呭垹闄や竴涓瓧絎︿覆鏃訛紝榪欑鏀瑰彉灝嗙珛鍗沖弽鏄犲湪鍏跺畠鐨勭獥鍙d腑銆?/font>

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

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

絎竴涓?pragma鍙欒堪寤虹珛鏁版嵁孌碉紝榪欓噷鍛藉悕涓簊hared銆傛偍鍙互灝嗚繖孌靛懡鍚嶄負浠諱綍涓涓偍鍠滄鐨勫悕瀛椼傚湪榪欓噷鐨?pragma鍙欒堪涔嬪悗鐨勬墍鏈夊垵濮嬪寲浜嗙殑鍙橀噺閮芥斁鍦╯hared鏁版嵁孌典腑銆傜浜屼釜#pragma鍙欒堪鏍囩ず孌電殑緇撴潫銆傚鍙橀噺榪涜涓撻棬鐨勫垵濮嬪寲鏄緢閲嶈鐨勶紝鍚﹀垯緙栬瘧鍣ㄥ皢鎶婂畠浠斁鍦ㄦ櫘閫氱殑鏈垵濮嬪寲鏁版嵁孌典腑鑰屼笉鏄斁鍦╯hared涓?/font>

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

/SECTION:shared,RWS
        

瀛楁瘝RWS琛ㄧず孌靛叿鏈夎銆佸啓鍜屽叡浜睘鎬с傛垨鑰咃紝鎮ㄤ篃鍙互鐩存帴鐢―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>



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

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

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

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

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

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

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

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

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

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

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

鈼? MFC  娑堟伅鍝嶅簲鍑芥暟涔﹀啓閿欒銆傛紜殑搴斾負  
afx_msg  LRESULT  OnMessageOwn(WPARAM  wparam,  LPARAM  lparam);  
ON_MESSAGE  瀹忓寘鍚己鍒剁被鍨嬭漿鎹€傞槻姝㈣繖縐嶉敊璇殑鏂規硶涔嬩竴鏄噸瀹氫箟  ON_MESSAGE  瀹忥紝鎶婁笅鍒椾唬鐮佸姞鍒? stdafx.h  涓紙鍦?include  &quot;afxwin.h&quot;涔嬪悗錛?鍑芥暟鍘熷艦閿欒鏃剁紪璇戜細鎶ラ敊  
#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  鍨嬪彉閲忥細volatile  鍛婅瘔緙栬瘧鍣ㄨ鍙橀噺鍙兘琚▼搴忎箣澶栫殑鏈煡鏂瑰紡淇敼錛堝緋葷粺銆佸叾浠栬繘紼嬪拰綰跨▼錛夈備紭鍖栫▼搴忎負浜嗕嬌紼嬪簭鎬ц兘鎻愰珮錛屽父鎶婁竴浜涘彉閲忔斁鍦ㄥ瘎瀛樺櫒涓紙綾諱技浜? register  鍏抽敭瀛楋級錛岃屽叾浠栬繘紼嬪彧鑳藉璇ュ彉閲忔墍鍦ㄧ殑鍐呭瓨榪涜淇敼錛岃屽瘎瀛樺櫒涓殑鍊兼病鍙樸傚鏋滀綘鐨勭▼搴忔槸澶氱嚎紼嬬殑錛屾垨鑰呬綘鍙戠幇鏌愪釜鍙橀噺鐨勫間笌棰勬湡鐨勪笉絎﹁屼綘紜俊宸叉紜殑璁劇疆浜嗭紝鍒欏緢鍙兘閬囧埌榪欐牱鐨勯棶棰樸傝繖縐嶉敊璇湁鏃朵細琛ㄧ幇涓虹▼搴忓湪鏈蹇紭鍖栧嚭閿欒屾渶灝忎紭鍖栨甯搞傛妸浣犺涓哄彲鐤戠殑鍙橀噺鍔犱笂  volatile  璇曡瘯銆? 

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

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

4.  /GZ  閫夐」錛氳繖涓夐」浼氬仛浠ヤ笅榪欎簺浜? 

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

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

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

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

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

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

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

]]>
DLL 綰跨▼鏈湴瀛樺偍http://m.shnenglu.com/road420/archive/2009/10/26/99510.html娣遍們鑰?/dc:creator>娣遍們鑰?/author>Mon, 26 Oct 2009 10:33:00 GMThttp://m.shnenglu.com/road420/archive/2009/10/26/99510.htmlhttp://m.shnenglu.com/road420/comments/99510.htmlhttp://m.shnenglu.com/road420/archive/2009/10/26/99510.html#Feedback0http://m.shnenglu.com/road420/comments/commentRss/99510.htmlhttp://m.shnenglu.com/road420/services/trackbacks/99510.htmlDLL, 綰跨▼鏈湴瀛樺偍
1.姒傝
.鏋勯燚LL  
   (1)浠呭鍑哄嚱鏁?/font>
      DLL鍙互瀵煎嚭鍏ㄥ眬鍙橀噺鍜岀被錛屼絾鎴戜滑涓嶅緩璁繖涔堝仛錛屽緩璁鍑哄嚱鏁般?/font>
   (2).lib
      姣忎釜DLL閮芥湁涓庝箣鐩稿搴旂殑.lib鏂囦歡,璇ユ枃浠朵腑鍒楀嚭浜?/font>DLL涓鍑虹殑鍑芥暟鍜屽彉閲忕殑絎﹀彿鍚?/font>
   (3)鎸囧畾瑕佸鍑虹殑鍑芥暟鍚?/font>
       鍥犱負涓嶅悓緙栬瘧鍣ㄧ殑Name mangle瑙勫垯涓嶅悓錛岃繖灝卞鑷?/font>DLL涓嶈兘璺ㄧ紪璇戝櫒浣跨敤銆?/font>
       鏈変互涓嬩袱縐嶆柟娉曞彲浠ヨВ鍐寵繖涓棶棰橈細
            1.鍦?/font>.def鏂囦歡涓寚瀹氳瀵煎嚭鐨勫嚱鏁板悕
            2.鍦ㄧ紪璇戞寚涓寚瀹氳瀵煎嚭鐨勫嚱鏁板悕錛?/font>
                #pragma comment(linker, "/export:MyFunc=_MyFunc@8")
.DLL鍔犺澆璺緞
    褰撻渶瑕佸姞杞戒竴涓?/font>DLL鏃訛紝緋葷粺浼氫緷鐓т笅闈㈢殑欏哄簭鍘誨鎵炬墍闇DLL鐩村埌鎵懼埌涓烘錛岀劧鍚庡姞杞斤紝鍚﹀垯鍔犺澆澶辮觸銆?/font>
              (1)褰撳墠鍙墽琛屾枃浠惰礬寰?/font>
              (2)GetWindowsDirectory榪斿洖鐨刉indows緋葷粺璺緞
              (3)16浣嶇郴緇熺殑璺緞 windows"system
              (4)GetSystemDirectory榪斿洖鐨刉indows緋葷粺璺緞
              (5)褰撳墠榪涚▼鎵鍦ㄨ礬寰?/font>
              (6)PATH鐜涓墍鎸囧畾鐨勮礬寰?/font>
­
.鍒涘緩\浣跨敤鍔ㄦ侀摼鎺ュ簱
棣栧厛蹇呴』鍒涘緩涓涓寘鍚渶瑕佸鍑虹殑絎﹀彿鐨勫ご鏂囦歡錛屼互渚垮叾浠栫▼搴忛摼鎺ュ埌璇ll涓婏細
// 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)錛岃繖鏍風紪璇戝櫒緙栬瘧鏃朵究鐭ラ亾榪欐槸浠庡閮ㄥ紩鍏ョ殑鍑芥暟銆傚湪閾炬帴鏃訛紝閾炬帴紼嬪簭灝嗙敓鎴愬鍏ヨ〃(ImportAddressTable),璇ヨ〃緗楀垪浜嗘墍鏈夎皟鐢ㄥ埌鐨勫嚱鏁幫紝浠ュ強涓涓┖鐧界殑瀵瑰簲鍦板潃銆傚湪紼嬪簭鎵ц鏃訛紝鍔犺澆鍣ㄥ皢鍔ㄦ佺殑濉叆姣忎釜鍑芥暟絎﹀彿鍦ㄦ湰榪涚▼涓殑鍦板潃錛屼嬌寰楃▼搴忚兘姝g‘鐨勮皟鐢ㄥ埌dll涓殑鍑芥暟涓娿?
榪欑閫氳繃dll鎻愪緵鐨?h鍜?lib鏂囦歡榪涜閾炬帴dll鐨勪嬌鐢ㄦ柟寮忥紝縐頒負闅愬紡閾炬帴銆傜敤vc寮鍙戠▼搴忔椂錛屽嚑涔庢墍鏈夌殑緋葷粺API璋冪敤閮界敤浜嗛殣寮忛摼鎺ャ?
.鏄懼紡閾炬帴
鍦╡xe鍒涘緩鏃朵笉寮曠敤.lib鏂囦歡涓殑絎﹀彿錛屽綋鐒朵篃涓嶅繀鍖呭惈.h澶存枃浠訛紝鑰屾槸鐢辯▼搴忚皟鐢↙oadLibrary(Ex)浠ュ強GetProcAddress鍑芥暟鏉ヨ幏鍙栨瘡涓渶瑕佷嬌鐢ㄧ殑鍑芥暟鍦板潃錛屼粠鑰岃繘琛宒ll涓殑鍑芥暟璋冪敤錛岃繖縐峝ll浣跨敤鏂規硶縐頒負鏄懼紡閾炬帴銆傛樉寮忛摼鎺ユ椂涓嶇敓鎴愬搴攄ll鐨処AT.
褰撳喅瀹氫笉鍐嶄嬌鐢ㄨdll鏃訛紝閫氳繃璋冪敤FreeLibrary鏉ュ嵏杞姐傞渶瑕佹敞鎰忕殑鏄紝鍚屼竴涓繘紼嬩腑鍏辮璋冪敤LoadLibrary鐨勬鏁拌鍜岃皟鐢‵reeLibrary鐨勬鏁扮浉絳夛紝鍥犱負緋葷粺緇存姢浜嗕竴涓嬌鐢ㄨ鏁幫紝褰撹鏁頒負0鏃訛紝鎵嶄細鐪熸鐨勫嵏杞借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
                                    寤鴻姘歌繙涓嶈浣挎湁榪欎釜鍊鹼紝瀹冪殑瀛樺湪浠呬粎鏄負浜嗗悜鍚庡吋瀹廣?/font>
                  鏇村鍐呭璇瘋闂細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鐨勫紩鐢ㄨ鏁版槸浠ヨ繘紼嬩負鍗曚綅鐨勩?/font>LoadLibrary浼氭妸DLL鏂囦歡鍔犺澆鍒板唴瀛橈紝鐒跺悗鏄犲皠鍒拌繘紼嬬┖闂翠腑銆?/font>
       澶氭鍔犺澆鍚屼竴DLL鍙細澧炲姞寮曠敤璁℃暟鑰屼笉浼氬嬈℃槧灝勩傚綋鎵鏈夎繘紼嬪DLL鐨勫紩鐢ㄨ鏁伴兘涓?/font>0鏃訛紝緋葷粺浼氬湪鍐呭瓨涓噴鏀捐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鏂規硶鏉ュ垵濮嬪寲浠栦滑鑷凡銆?/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
      緋葷粺鍦ㄤ負姣忎釜榪涚▼絎竴嬈″姞杞借DLL鏃朵細錛屾墽琛?/font>DLL_PROCESS_ATTACH鍚庨潰鐨勮鍙ユ潵鍒濆鍖?/font>DLL,DllMain鐨勮繑鍥炲間粎鐢卞畠鍐沖畾銆?/font>
     緋葷粺浼氬拷鐣?/font>DLL_THREAD_ATTACH絳夋墽琛屽悗DllMain鐨勮繑鍥炲箋?/font>
     濡傛灉DllMain榪斿洖FALSE,緋葷粺浼氳嚜鍔ㄨ皟鐢?/font>DLL_PROCESS_DETACH鐨勪唬鐮佸茍瑙i櫎DLL鏂囦歡涓繘紼嬩腑鐨勫唴瀛樻槧灝勩?/font>        
    (2)DLL_PROCESS_DETACH
        濡傛灉DLL鏄洜榪涚▼緇堟鑰屽嵏杞藉叾鍦ㄨ繘紼嬩腑鐨勬槧灝勶紝閭d箞璐熻矗璋冪敤ExitProcess鐨勭嚎紼嬩細璋冪敤DllMain涓?/font>DLL_PROCESS_DETACH鎵瀵瑰簲鐨勪唬鐮併?/font>
        濡傛灉DLL鏄洜FreeLibrary鎴?/font>FreeLibraryAndExitThread錛岃屽嵏杞藉叾鍦ㄨ繘紼嬩腑鐨勬槧灝? 閭d箞FreeLibrary鎴?/font>FreeLibraryAndExitThread浼氳礋璐h皟鐢?/font>DllMain涓?/font>DLL_PROCESS_DETACH鎵瀵瑰簲鐨勪唬鐮併?/font>
        濡傛灉DLL鏄洜TerminateProcess鑰屽嵏杞藉叾鍦ㄨ繘紼嬩腑鐨勬槧灝?/font>,緋葷粺涓嶄細璋冪敤DllMain涓?/font>DLL_PROCESS_DETACH鎵瀵瑰簲鐨勪唬鐮併?/font>
    (3) DLL_THREAD_ATTACH
        鑻ヨ繘紼嬫槸鍏堝姞杞界殑DLL,鍚庡垱寤虹殑綰跨▼
        閭d箞鍦ㄨ繘紼嬩腑鍒涘緩鏂扮嚎紼嬫椂(涓葷嚎紼嬮櫎澶?/font>)錛岀郴緇熶細鎵ц璇ヨ繘紼嬪凡杞界殑鎵鏈?/font>DLL鐨?/font>DllMain涓?/font>DLL_THREAD_ATTACH瀵瑰簲鐨勪唬鐮併?/font>
         鑻ヨ繘紼嬫槸鍏堝垱寤虹殑綰跨▼,鍚庡姞杞界殑DLL
         閭d箞緋葷粺涓嶄細璋冪敤DLL鐨?/font>DllMain涓殑浠g爜銆?/font>
     (4) DLL_THREAD_DETACH
         榪涚▼涓殑綰跨▼閫鍑烘椂錛屼細鍏堟墽琛屾墍鏈夊凡鍔犺澆DLL鐨?/font>DllMain涓?/font>DLL_THREAD_DETACH鎵瀵瑰簲鐨勪唬鐮併傝嫢璇ヤ唬鐮佷腑鏈夋寰幆錛岀嚎紼嬩笉浼氶鍑恒?/font>              
2.3 鍚屾鍖朌llMain鐨勮皟鐢?/strong>
      鍚屼竴鏃墮棿鍙兘鏈変竴涓嚎紼嬭皟鐢?/font>DllMain涓殑浠g爜錛屾墍浠ヤ笅闈㈢殑浠g爜浼氬鑷存寰幆
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爜涓嶄細琚墽琛岋紝涓?/font>CreateThread姘告棤涓嶄細榪斿洖銆?/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浼氬厛鍘昏浣嶇疆鏌ユ壘鏈夋棤鐩稿簲鐨勯敭鍊間笌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釜琚敞鍏ョ殑榪涚▼閲屼負鎵嬈蹭負浜嗐?/font>
   Subclass鍚屼竴榪涚▼涓殑紿椾綋錛?/font>http://msdn2.microsoft.com/en-us/library/ms649784.aspx.
2.鐢ㄦ敞鍐岃〃娉ㄥ叆DLL
     璇ユ柟娉曢傜敤浜庣粰GUI鐨勭▼搴忔敞鍏?/font>DLL
     鎵鏈夌殑GUI搴旂敤紼嬪簭鍦ㄥ惎鍔ㄦ椂閮戒細鍔犺澆User32.dll錛岃屽湪User32.dll鐨?/font>DLL_PROCESS_ATTACH浠g爜鏍規嵁娉ㄥ唽琛ㄤ腑鐨勪俊鎭?/font>
鏉ユ敞鍏ョ敤鎴鋒寚瀹氱殑DLL
娉ㄥ唽琛ㄩ」銆HKEY_LOCAL_MACHINE"Software"Microsoft"Windows NT"CurrentVersion"Windows"
涓湁涓や釜鍊鹼細
    LoadAppInit_Dlls錛氶敭鍊間腑鎸囧畾瑕佹敞鍏ョ殑DLL銆濡?/font>:c:"inject.dll
AppInit_Dlls錛氳嫢鍏墮敭鍊間負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灝嗕細媯鏌ヨ繖涓鹼紝濡傛灉鏈夌殑璇濆氨LoadLibrary璇ll銆傝繖涓柟娉曚笉濂斤紝鍥犱負澶у鏁版儏鍐墊垜浠彧闇瑕侀拡瀵規х殑娉ㄥ叆錛屽茍涓旀病鍔炴硶娉ㄥ叆鍒頒笉浣跨敤User32.dll鐨勮繘紼嬩腑錛?
­
2.鐢⊿etWindowsHookEx鍑芥暟錛屽茍浼犻掔洰鏍囩嚎紼婭D銆侀渶瑕佹寕杞界殑Dll鍦ㄦ湰榪涚▼涓殑鏄犲皠鍦板潃(hInstance)銆佹浛鎹㈠嚱鏁板湪鏈繘紼嬩腑鐨勫湴鍧銆傝繖鏍鳳紝褰撹鎸傝澆榪涚▼鐨勮繖涓嚎紼嬭鎵ц鐩稿簲鐨勬搷浣滄椂(GETMESSAGE銆侀敭鐩樻秷鎭箣綾葷殑)錛屽氨浼氬彂鐜板凡緇忓畨瑁呬簡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),浠庤屽疄鐜頒簡浜嬩歡鐨勯氱煡銆傝繖縐嶆柟娉曠殑濂藉鏄彲浠ラ拡瀵規煇涓繘紼嬪畨瑁匟ook錛岀己鐐規槸瀹規槗琚洰鏍囪繘紼嬪彂鐜般佸悓鏍峰彧閫傜敤浜嶨UI榪涚▼銆傚鏋滀笉鍐嶆兂浣跨敤鎸傞挬浜嗭紝閭d箞闇瑕佽皟鐢║nhookWindowsHookEx錛屽嵏杞紿ook銆?
­
3.浣跨敤榪滅▼綰跨▼娉ㄥ叆Dll(Injecting a DLL Using Remote Threads)
榪欎釜鏂規硶姣旇緝濂姐傛祦紼嬫槸榪欐牱鐨?
?璋冪敤VirtualAllocEx錛屽湪鐩爣榪涚▼淇濈暀涓鍧楀唴瀛橈紝騫舵彁浜わ紝鍏墮暱搴︽槸浣犺娉ㄥ叆Dll鐨勫叏璺緞闀垮害nLen + 1錛岃繑鍥炲湴鍧pv;
?璋冪敤WriteProcessMemory錛屽湪鐩爣榪涚▼鐨刾v澶勫啓鍏ll鐨勫叏璺緞錛屾敞鎰忚娣誨姞\0緇撴潫絎?
?鑾峰彇鏈繘紼?/strong>鐨凩oadLibrary鍑芥暟鐨勫湴鍧錛屾柟娉曟槸璋冪敤pfn = GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA")鈥斺斾箣鎵浠ヨ幏鍙栨湰榪涚▼鐨勫湴鍧錛屾槸鍥犱負kernel32.dll鍦ㄦ瘡涓繘紼嬬殑鏄犲皠鍦板潃閮界浉鍚岋紝鍊樿嫢涓嶅悓錛岄偅涔堟鏂規硶鍒欐棤鏁?
?璋冪敤HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0,  pfn, pv, 0, NULL)鏉ュ垱寤鴻繙紼嬬嚎紼嬶紝鍏跺疄榪欎釜綰跨▼鍑芥暟灝辨槸LoadLibrary鍑芥暟錛屽洜姝ゅ皢鎵ц鏄犲皠Dll鍒扮洰鏍囪繘紼嬬殑鎿嶄綔;
?璋冪敤VirtuallFreeEx(hProcessRemote, pv)閲婃斁鎻愪氦鐨勫唴瀛?
榪欎究瀹屾垚浜哾ll娉ㄥ叆銆?
緙虹偣鏄笉鑳界敤鍦╳indows98涓娿備絾鏄浜巟p閮借琚井杞姏寮冪殑騫翠唬錛寃indows98鍦板獎鍝嶄笉澶т簡銆?
­
4.鎶潃緹婄毊鐨勭嫾錛氫嬌鐢ㄧ壒媧涗紛Dll鏉ユ敞鍏ll(Injecting a DLL with a Trojan DLL)
鍏跺疄灝辨槸鏇挎崲鏌愪釜鐩爣榪涚▼瑕佸姞杞界殑a.dll錛屽茍鎶奱.dll鐨勬墍鏈夊紩鍑哄嚱鏁扮敤鍑芥暟杞彂鍣ㄥ湪鑷繁鐨刣ll寮曞嚭銆?
­
5.鐢ㄨ皟璇曞嚱鏁版彃鍏ll
ReadProcessMemory鍜學riteProcessMemory鏄痺indows鎻愪緵鐨勮皟璇曞嚱鏁般傚鏋滃湪鏂規硶3涓皟鐢╓riteProcessMemory鍐欏叆鐨勪笉鏄瓧涓茶屾槸綺懼績緙栨帓濂界殑鏈哄櫒鎸囦護錛屽茍涓斿啓鍦ㄧ洰鏍囪繘紼嬬壒瀹氱殑鍦板潃絀洪棿錛岄偅涔堣繖孌墊満鍣ㄦ寚浠ゅ氨鏈夋満浼氭墽琛屸斺旇岃繖孌墊満鍣ㄦ寚浠ゆ伆濂藉畬鎴愪簡LoadLibrary鍔熻兘;
­
6.鍏朵粬鏂規硶錛堢暐錛?
­
浜?鎸傛帴API(API Hooking)
鍏跺疄錛岃繖鏄澶氭敞鍏ョ殑Dll閮芥効鎰忓仛鐨勪簨鎯呫?
鎵璋撴寕鎺PI灝辨槸鍦ㄧ洰鏍囪繘紼嬭皟鐢╳indows API涔嬪墠錛屽厛鎵ц鎴戜滑鐨勪豢API鍑芥暟錛屼粠鑰屾帶鍒剁郴緇烝PI鐨勮涓猴紝杈懼埌鐗規畩鐨勭洰鐨勩?
鎴戜滑鐨勪豢閫犲嚱鏁板繀欏諱笌瑕佹浛鎹㈢殑緋葷粺API鏈夌浉鍚岀殑鍨嬪弬琛ㄤ互鍙婄浉鍚岀殑榪斿洖鍊肩被鍨?
­
1.鏀瑰啓緋葷粺API浠g爜鐨勫墠鍑犱釜瀛楄妭錛岄氳繃鍐欏叆jmp鎸囦護鏉ヨ煩杞埌鎴戜滑鐨勫嚱鏁般傚湪鎴戜滑鐨勫嚱鏁伴噷鎵ц鎿嶄綔錛屽彲浠ョ洿鎺ヨ繑鍥炰竴涓鹼紝涔熷彲浠ュ皢緋葷粺API鐨勫墠鍑犱釜瀛楄妭澶嶅師錛岃皟鐢ㄧ郴緇烝PI錛屽茍榪斿洖緋葷粺API鐨勫尖斺旈殢渚夸綘鎯蟲庝箞鍋氥?
姝ゆ柟娉曠殑緙虹偣鏄浜庢姠鍗犲紡澶氱嚎紼嬬殑緋葷粺涓嶅お綆$敤銆?
­
2.閫氳繃鏀瑰啓鐩爣榪涚▼IAT涓璋冪敤鐨勫嚱鏁板湴鍧鏉ヨ揪鍒扮洰鐨勩傚叿浣撴搷浣滆涔︿腑紺轟緥
­
­
­
綰跨▼鏈湴瀛樺偍(Thread-Local Storage)
渚嬪瓙C / C + +榪愯鏈熷簱瑕佷嬌鐢ㄧ嚎紼嬫湰鍦板瓨鍌ㄥ櫒錛?T L S錛夈傜敱浜庤繍琛屾湡搴撴槸鍦ㄥ綰跨▼搴旂敤紼嬪簭鍑虹幇鍓嶇殑璁稿騫磋璁$殑錛屽洜姝よ繍琛屾湡搴撲腑鐨勫ぇ澶氭暟鍑芥暟鏄敤浜庡崟綰跨▼搴旂敤紼嬪簭鐨勩傚嚱鏁皊 t r t o k灝辨槸涓緢濂界殑渚嬪瓙銆?/font>
灝藉彲鑳介伩鍏嶄嬌鐢ㄥ叏灞鍙橀噺鍜岄潤鎬佸彉閲?/font>
1.鍔ㄦ乀LS
鍥?1-1 鐢ㄤ簬綆$悊T L S鐨勫唴閮ㄦ暟鎹粨鏋?/font>
­
鍦ㄥ垱寤虹嚎紼嬫椂錛岃繘紼嬩細涓哄綋鍓嶅垱寤虹殑綰跨▼鍒嗛厤涓涓?/font>void *鐨勬暟緇勪綔涓?/font>TLS鐢ㄣ傚畠鐢ㄤ簬瀛樺偍鍙檺褰撳墠綰跨▼鍙鐨勫叏灞鍙橀噺銆?/font>
浠庤屼嬌榪涚▼涓殑姣忎釜綰跨▼閮藉彲浠ユ湁鑷凡鐨?/font>(涓嶈兘鍏跺畠綰跨▼璁塊棶鐨?/font>)鍏ㄥ眬鍙橀噺銆?/font>
TlsAlloc鍦ㄨ繑鍥炴椂浼氬厛鎶婃Ы涓殑鍊肩疆涓?/font>0銆傛瘡涓嚎紼嬭嚦灝戞湁64涓Ы銆?/font>
2.闈欐乀LS
              __declspec(thread)鍏抽敭瀛楃敤浜庡0鏄庯紝綰跨▼鏈湴鐨勫叏灞鍙橀噺銆?/font>
              瑕佹眰澹版槑鐨勫彉閲忓繀欏繪槸鍏ㄥ眬鍙橀噺鎴栭潤鎬佸彉閲忋?/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>
              久久av资源网| 性欧美暴力猛交69hd| 麻豆精品在线视频| 久久精品99国产精品日本| 欧美一区二区三区男人的天堂 | 麻豆精品一区二区av白丝在线| 亚洲欧美另类国产| 午夜精品久久| 久久久av水蜜桃| 免费成人av| 91久久精品国产91性色tv| 老牛国产精品一区的观看方式| 久久久亚洲精品一区二区三区 | 久久青草久久| 欧美激情视频网站| 欧美午夜欧美| 好吊日精品视频| aa级大片欧美三级| 欧美亚洲系列| 欧美激情亚洲自拍| 亚洲视频久久| 久久久久欧美精品| 欧美日韩在线三级| 在线成人小视频| 一区二区三区视频在线观看| 久久福利毛片| 99国内精品| 美女任你摸久久| 国产亚洲成人一区| 一区二区高清视频在线观看| 久久成人一区二区| 亚洲精品一区二区在线观看| 久久精品综合一区| 理论片一区二区在线| 免费视频一区| 亚洲欧美综合v| 欧美日韩视频一区二区| 韩国女主播一区二区三区| 免费av成人在线| 国产精品私拍pans大尺度在线| 亚洲国产视频直播| 久久久国产精彩视频美女艺术照福利 | 久久久久久网站| 欧美色视频日本高清在线观看| 伊人久久大香线蕉av超碰演员| 中文欧美在线视频| 亚洲国内精品在线| 久久久久久久999| 国产欧美一级| 午夜精品亚洲| 中文av一区特黄| 欧美精品激情| 91久久精品美女高潮| 久久综合中文色婷婷| 香蕉久久一区二区不卡无毒影院| 欧美日韩综合另类| 亚洲午夜在线视频| 亚洲国产精品一区二区第一页 | 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美午夜电影在线观看| 亚洲精品123区| 欧美国产精品专区| 久久天天狠狠| 91久久夜色精品国产网站| 欧美www视频| 免费久久99精品国产自在现线| 黑人巨大精品欧美黑白配亚洲| 久久一区二区三区四区| 久久久精品一区| 欧美在线一二三四区| 国产精品自在线| 久久久久久香蕉网| 久久久久久亚洲精品杨幂换脸 | 国产免费成人在线视频| 亚洲欧美综合v| 午夜在线视频一区二区区别 | 亚洲乱亚洲高清| 91久久黄色| 国产精品国产一区二区| 久久精品国产成人| 久久久久这里只有精品| 亚洲欧洲一区二区在线观看| 日韩视频亚洲视频| 国产乱码精品一区二区三区五月婷| 欧美一区中文字幕| 久久国产精品色婷婷| 亚洲激情国产| 韩国女主播一区| 国产精品午夜av在线| 欧美在线91| 久久免费国产精品| 中文一区二区在线观看| 亚洲欧美视频在线观看| 伊人精品久久久久7777| 亚洲美女性视频| 国产一区二区日韩| 亚洲高清资源| 国产精品区一区二区三| 欧美**人妖| 欧美午夜激情视频| 欧美凹凸一区二区三区视频| 欧美午夜不卡在线观看免费| 老鸭窝91久久精品色噜噜导演| 欧美国产第二页| 欧美中文字幕视频| 欧美精品色一区二区三区| 亚洲伊人久久综合| 久久躁狠狠躁夜夜爽| 亚洲欧美日韩综合一区| 免费的成人av| 欧美在现视频| 久久国产一区二区| 亚洲欧美电影在线观看| 欧美电影免费| 久久青草欧美一区二区三区| 欧美日韩精品久久| 免费高清在线一区| 国产嫩草影院久久久久| 亚洲精选成人| 在线成人av网站| 中国成人在线视频| 亚洲少妇诱惑| 欧美国产另类| 欧美成人一品| 伊人久久噜噜噜躁狠狠躁| 性色一区二区| 亚洲欧美视频| 国产精品av久久久久久麻豆网| 欧美福利一区二区| 经典三级久久| 亚洲欧美资源在线| 性色一区二区| 国产精品第一页第二页第三页| 亚洲精品123区| 亚洲免费观看视频| 欧美激情综合亚洲一二区| 欧美成人午夜激情在线| 91久久国产综合久久| 久久男人资源视频| 你懂的成人av| 亚洲韩国青草视频| 男男成人高潮片免费网站| 快射av在线播放一区| 国产综合久久久久久鬼色| 欧美一区二区三区免费观看 | 欧美成人精品在线播放| 一区二区三区自拍| 久久久亚洲成人| 欧美黄污视频| 国产精品99久久久久久久女警 | 久久一区亚洲| 女人天堂亚洲aⅴ在线观看| 永久免费精品影视网站| 久久综合给合久久狠狠狠97色69| 老**午夜毛片一区二区三区| 在线观看国产成人av片| 欧美成年人网站| 99re国产精品| 久久国产一区二区| 精品成人国产| 欧美韩日精品| 亚洲一线二线三线久久久| 久久av红桃一区二区小说| 在线播放不卡| 欧美人与禽猛交乱配| 亚洲午夜精品17c| 久久久久综合一区二区三区| 亚洲国产精品一区| 欧美日韩精品一本二本三本| 亚洲制服丝袜在线| 欧美高清在线一区二区| 亚洲一级在线| 红杏aⅴ成人免费视频| 欧美精品一区二区三| 亚洲欧美日韩网| 欧美激情一区二区在线| 亚洲欧美日韩在线播放| 极品少妇一区二区| 欧美视频专区一二在线观看| 久久疯狂做爰流白浆xx| 亚洲美女精品一区| 久久蜜桃av一区精品变态类天堂| 亚洲黄色小视频| 国产日韩欧美高清免费| 欧美 日韩 国产在线| 亚洲欧美三级伦理| 亚洲黄一区二区| 性视频1819p久久| 一区二区三区产品免费精品久久75| 国产精品一区二区三区四区| 欧美成人嫩草网站| 久久精品国产99精品国产亚洲性色| 亚洲日韩第九十九页| 另类酷文…触手系列精品集v1小说| 亚洲欧美日韩精品久久亚洲区| 亚洲激情在线播放| 在线欧美亚洲| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品看片资源| 欧美亚洲不卡|