锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浜屻佸爢鍜屾爤鐨勭悊璁虹煡璇?nbsp;
2.1鐢寵鏂瑰紡
stack:
鐢辯郴緇熻嚜鍔ㄥ垎閰嶃?nbsp;渚嬪錛屽0鏄庡湪鍑芥暟涓竴涓眬閮ㄥ彉閲?nbsp;int b; 緋葷粺鑷姩鍦ㄦ爤涓負(fù)b寮杈熺┖闂?nbsp;
heap:
闇瑕佺▼搴忓憳鑷繁鐢寵錛屽茍鎸囨槑澶у皬錛屽湪c涓璵alloc鍑芥暟
濡俻1 = (char *)malloc(10);
鍦–++涓敤new榪愮畻絎?nbsp;
濡俻2 = (char *)malloc(10);
浣嗘槸娉ㄦ剰p1銆乸2鏈韓鏄湪鏍堜腑鐨勩?nbsp;
2.2
鐢寵鍚庣郴緇熺殑鍝嶅簲
鏍堬細(xì)鍙鏍堢殑鍓╀綑絀洪棿澶т簬鎵鐢寵絀洪棿錛岀郴緇熷皢涓虹▼搴忔彁渚涘唴瀛橈紝鍚﹀垯灝嗘姤寮傚父鎻愮ず鏍堟孩鍑恒?nbsp;
鍫嗭細(xì)棣栧厛搴旇鐭ラ亾鎿嶄綔緋葷粺鏈変竴涓褰曠┖闂插唴瀛樺湴鍧鐨勯摼琛紝褰撶郴緇熸敹鍒扮▼搴忕殑鐢寵鏃訛紝
浼?xì)閬嶅巻璇ラ摼琛ㄥQ屽鎵劇涓涓┖闂村ぇ浜庢墍鐢寵絀洪棿鐨勫爢緇撶偣錛岀劧鍚庡皢璇ョ粨鐐逛粠絀洪棽緇撶偣閾捐〃涓垹闄わ紝騫跺皢璇ョ粨鐐圭殑絀洪棿鍒嗛厤緇欑▼搴忥紝鍙﹀錛屽浜庡ぇ澶氭暟緋葷粺錛屼細(xì)鍦ㄨ繖鍧楀唴瀛樼┖闂翠腑鐨勯鍦板潃澶勮褰曟湰嬈″垎閰嶇殑澶у皬錛岃繖鏍鳳紝浠g爜涓殑delete璇彞鎵嶈兘姝g‘鐨勯噴鏀炬湰鍐呭瓨絀洪棿銆傚彟澶栵紝鐢變簬鎵懼埌鐨勫爢緇撶偣鐨勫ぇ灝忎笉涓瀹氭濂界瓑浜庣敵璇風(fēng)殑澶у皬錛岀郴緇熶細(xì)鑷姩鐨勫皢澶氫綑鐨勯偅閮ㄥ垎閲嶆柊鏀懼叆絀洪棽閾捐〃涓?nbsp;
2.3鐢寵澶у皬鐨勯檺鍒?nbsp;
鏍堬細(xì)鍦╓indows涓?鏍堟槸鍚戜綆鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄竴鍧楄繛緇殑鍐呭瓨鐨勫尯鍩熴傝繖鍙ヨ瘽鐨勬剰鎬濇槸鏍堥《鐨勫湴鍧鍜屾爤鐨勬渶澶у閲忔槸緋葷粺棰勫厛瑙勫畾濂界殑錛屽湪WINDOWS涓嬶紝鏍堢殑澶у皬鏄?M錛堜篃鏈夌殑璇存槸1M錛屾諱箣鏄竴涓紪璇戞椂灝辯‘瀹氱殑甯告暟錛夛紝濡傛灉鐢寵鐨勭┖闂磋秴榪囨爤鐨勫墿浣欑┖闂存椂錛屽皢鎻愮ずoverflow銆傚洜姝わ紝鑳戒粠鏍堣幏寰楃殑絀洪棿杈冨皬銆?nbsp;
鍫嗭細(xì)鍫嗘槸鍚戦珮鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄笉榪炵畫(huà)鐨勫唴瀛樺尯鍩熴傝繖鏄敱浜庣郴緇熸槸鐢ㄩ摼琛ㄦ潵瀛樺偍鐨勭┖闂插唴瀛樺湴鍧鐨勶紝鑷劧鏄笉榪炵畫(huà)鐨勶紝鑰岄摼琛ㄧ殑閬嶅巻鏂瑰悜鏄敱浣庡湴鍧鍚戦珮鍦板潃銆傚爢鐨勫ぇ灝忓彈闄愪簬璁$畻鏈虹郴緇熶腑鏈夋晥鐨勮櫄鎷熷唴瀛樸傜敱姝ゅ彲瑙侊紝鍫嗚幏寰楃殑絀洪棿姣旇緝鐏墊椿錛屼篃姣旇緝澶с?nbsp;
2.4鐢寵鏁堢巼鐨勬瘮杈冿細(xì)
鏍堢敱緋葷粺鑷姩鍒嗛厤錛岄熷害杈冨揩銆備絾紼嬪簭鍛樻槸鏃犳硶鎺у埗鐨勩?nbsp;
鍫嗘槸鐢眓ew鍒嗛厤鐨勫唴瀛橈紝涓鑸熷害姣旇緝鎱紝鑰屼笖瀹規(guī)槗浜х敓鍐呭瓨紕庣墖,涓嶈繃鐢ㄨ搗鏉ユ渶鏂逛究.
鍙﹀錛屽湪WINDOWS涓嬶紝鏈濂界殑鏂瑰紡鏄敤VirtualAlloc鍒嗛厤鍐呭瓨錛屼粬涓嶆槸鍦ㄥ爢錛屼篃涓嶆槸鍦ㄦ爤鏄洿鎺ュ湪榪涚▼鐨勫湴鍧絀洪棿涓繚鐣欎竴蹇唴瀛橈紝铏界劧鐢ㄨ搗鏉ユ渶涓嶆柟渚褲備絾鏄熷害蹇紝涔熸渶鐏墊椿銆?nbsp;
2.5鍫嗗拰鏍堜腑鐨勫瓨鍌ㄥ唴瀹?nbsp;
鏍堬細(xì) 鍦ㄥ嚱鏁拌皟鐢ㄦ椂錛岀涓涓繘鏍堢殑鏄富鍑芥暟涓悗鐨勪笅涓鏉℃寚浠わ紙鍑芥暟璋冪敤璇彞鐨勪笅涓鏉″彲鎵ц璇彞錛夌殑鍦板潃錛岀劧鍚庢槸鍑芥暟鐨勫悇涓弬鏁幫紝鍦ㄥぇ澶氭暟鐨凜緙栬瘧鍣ㄤ腑錛屽弬鏁版槸鐢卞彸寰(xiàn)宸﹀叆鏍堢殑錛岀劧鍚庢槸鍑芥暟涓殑灞閮ㄥ彉閲忋傛敞鎰忛潤(rùn)鎬佸彉閲忔槸涓嶅叆鏍堢殑銆?nbsp;
褰撴湰嬈″嚱鏁拌皟鐢ㄧ粨鏉熷悗錛屽眬閮ㄥ彉閲忓厛鍑烘爤錛岀劧鍚庢槸鍙傛暟錛屾渶鍚庢爤欏舵寚閽堟寚鍚戞渶寮濮嬪瓨鐨勫湴鍧錛屼篃灝辨槸涓誨嚱鏁頒腑鐨勪笅涓鏉℃寚浠わ紝紼嬪簭鐢辮鐐圭戶(hù)緇繍琛屻?nbsp;
鍫嗭細(xì)涓鑸槸鍦ㄥ爢鐨勫ご閮ㄧ敤涓涓瓧鑺傚瓨鏀懼爢鐨勫ぇ灝忋傚爢涓殑鍏蜂綋鍐呭鏈夌▼搴忓憳瀹夋帓銆?nbsp;
2.6瀛樺彇鏁堢巼鐨勬瘮杈?nbsp;
char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa鏄湪榪愯鏃跺埢璧嬪肩殑錛?nbsp;
鑰宐bbbbbbbbbb鏄湪緙栬瘧鏃跺氨紜畾鐨勶紱
浣嗘槸錛屽湪浠ュ悗鐨勫瓨鍙栦腑錛屽湪鏍堜笂鐨勬暟緇勬瘮鎸囬拡鎵鎸囧悜鐨勫瓧絎︿覆(渚嬪鍫?蹇?nbsp;
姣斿錛?nbsp;
#include
void main()
{
char a = 1;
char c[] = "1234567890";
char *p ="1234567890";
a = c[1];
a = p[1];
return;
}
瀵瑰簲鐨勬眹緙栦唬鐮?nbsp;
10: a = c[1];
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]
0040106A 88 4D FC mov byte ptr [ebp-4],cl
11: a = p[1];
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]
00401070 8A 42 01 mov al,byte ptr [edx+1]
00401073 88 45 FC mov byte ptr [ebp-4],al
絎竴縐嶅湪璇誨彇鏃剁洿鎺ュ氨鎶婂瓧絎︿覆涓殑鍏冪礌璇誨埌瀵勫瓨鍣╟l涓紝鑰岀浜岀鍒欒鍏堟妸鎸囬拡鍊艱鍒癳dx涓紝鍦ㄦ牴鎹甧dx璇誨彇瀛楃錛屾樉鐒舵參浜?jiǎn)銆?nbsp;
2.7灝忕粨錛?nbsp;
鍫嗗拰鏍堢殑鍖哄埆鍙互鐢ㄥ涓嬬殑姣斿柣鏉ョ湅鍑猴細(xì)
浣跨敤鏍堝氨璞℃垜浠幓楗閲屽悆楗紝鍙鐐硅彍錛堝彂鍑虹敵璇鳳級(jí)銆佷粯閽便佸拰鍚冿紙浣跨敤錛夛紝鍚冮ケ浜?jiǎn)灏辫祹图屼笉蹇呯悊浼?xì)鍒囪彍銆佹礂鑿滅瓑鍑嗗宸ヤ綔鍜屾礂紕椼佸埛閿呯瓑鎵熬宸ヤ綔錛屼粬鐨勫ソ澶勬槸蹇嵎錛屼絾鏄嚜鐢卞害灝忋?nbsp;
浣跨敤鍫嗗氨璞℃槸鑷繁鍔ㄦ墜鍋氬枩嬈㈠悆鐨勮彍鑲達(dá)紝姣旇緝楹葷儲(chǔ)錛屼絾鏄瘮杈冪鍚堣嚜宸辯殑鍙e懗錛岃屼笖鑷敱搴﹀ぇ銆?nbsp;
windows榪涚▼涓殑鍐呭瓨緇撴瀯
鍦ㄩ槄璇繪湰鏂囦箣鍓嶏紝濡傛灉浣犺繛鍫嗘爤鏄粈涔堝涓嶇煡閬撶殑璇濓紝璇峰厛闃呰鏂囩珷鍚庨潰鐨勫熀紜鐭ヨ瘑銆?nbsp;
鎺ヨЕ榪囩紪紼嬬殑浜洪兘鐭ラ亾錛岄珮綰ц璦閮借兘閫氳繃鍙橀噺鍚嶆潵璁塊棶鍐呭瓨?shù)腑鐨勬暟鎹傞偅涔堣繖浜涘彉閲忓湪鍐呭瓨?shù)腑鏄浣曞瓨鏀剧殑鍛㈠Q熺▼搴忓張鏄浣曚嬌鐢ㄨ繖浜涘彉閲忕殑鍛紵涓嬮潰灝變細(xì)瀵規(guī)榪涜娣卞叆鐨勮璁恒備笅鏂囦腑鐨凜璇█浠g爜濡傛病鏈夌壒鍒0鏄庯紝榛樿閮戒嬌鐢╒C緙栬瘧鐨剅elease鐗堛?nbsp;
棣栧厛錛屾潵浜?jiǎn)瑙d竴涓?nbsp;C 璇█鐨勫彉閲忔槸濡備綍鍦ㄥ唴瀛樺垎閮ㄧ殑銆侰 璇█鏈夊叏灞鍙橀噺(Global)銆佹湰鍦板彉閲?Local)錛岄潤(rùn)鎬佸彉閲?Static)銆佸瘎瀛樺櫒鍙橀噺(Regeister)銆傛瘡縐嶅彉閲忛兘鏈変笉鍚岀殑鍒嗛厤鏂瑰紡銆傚厛鏉ョ湅涓嬮潰榪欐浠g爜錛?nbsp;
#include <stdio.h>
int g1=0, g2=0, g3=0;
int main()
{
static int s1=0, s2=0, s3=0;
int v1=0, v2=0, v3=0;
//鎵撳嵃鍑哄悇涓彉閲忕殑鍐呭瓨鍦板潃
printf("0x%08x\n",&v1); //鎵撳嵃鍚勬湰鍦板彉閲忕殑鍐呭瓨鍦板潃
printf("0x%08x\n",&v2);
printf("0x%08x\n\n",&v3);
printf("0x%08x\n",&g1); //鎵撳嵃鍚勫叏灞鍙橀噺鐨勫唴瀛樺湴鍧
printf("0x%08x\n",&g2);
printf("0x%08x\n\n",&g3);
printf("0x%08x\n",&s1); //鎵撳嵃鍚勯潤(rùn)鎬佸彉閲忕殑鍐呭瓨鍦板潃
printf("0x%08x\n",&s2);
printf("0x%08x\n\n",&s3);
return 0;
}
緙栬瘧鍚庣殑鎵ц緇撴灉鏄細(xì)
0x0012ff78
0x0012ff7c
0x0012ff80
0x004068d0
0x004068d4
0x004068d8
0x004068dc
0x004068e0
0x004068e4
杈撳嚭鐨勭粨鏋滃氨鏄彉閲忕殑鍐呭瓨鍦板潃銆傚叾涓璿1,v2,v3鏄湰鍦板彉閲忥紝g1,g2,g3鏄叏灞鍙橀噺錛宻1,s2,s3鏄潤(rùn)鎬佸彉閲忋備綘鍙互鐪嬪埌榪欎簺鍙橀噺鍦ㄥ唴瀛樻槸榪炵畫(huà)鍒嗗竷鐨勶紝浣嗘槸鏈湴鍙橀噺鍜屽叏灞鍙橀噺鍒嗛厤鐨勫唴瀛樺湴鍧宸簡(jiǎn)鍗佷竾鍏崈閲岋紝鑰屽叏灞鍙橀噺鍜岄潤(rùn)鎬佸彉閲忓垎閰嶇殑鍐呭瓨鏄繛緇殑銆傝繖鏄洜涓烘湰鍦板彉閲忓拰鍏ㄥ眬/闈?rùn)鎬佸彉閲忔槸鍒嗛厤鍦ㄤ笉鍚岀被鍨嬬殑鍐呭瓨鍖哄煙涓殑緇撴灉銆傚浜庝竴涓繘紼嬬殑鍐呭瓨絀洪棿鑰岃█錛屽彲浠ュ湪閫昏緫涓婂垎鎴?涓儴浠斤細(xì)浠g爜鍖猴紝闈?rùn)鎬佹暟鎹尯鍜屽姩鎬佹暟鎹尯銆傚姩鎬佹暟鎹尯涓鑸氨鏄?#8220;鍫嗘爤”銆?#8220;鏍?stack)”鍜?#8220;鍫?heap)”鏄袱縐嶄笉鍚岀殑鍔ㄦ佹暟鎹尯錛屾爤鏄竴縐嶇嚎鎬х粨鏋勶紝鍫嗘槸涓縐嶉摼寮忕粨鏋勩傝繘紼嬬殑姣忎釜綰跨▼閮芥湁縐佹湁鐨?#8220;鏍?#8221;錛屾墍浠ユ瘡涓嚎紼嬭櫧鐒朵唬鐮佷竴鏍鳳紝浣嗘湰鍦板彉閲忕殑鏁版嵁閮芥槸浜掍笉騫叉壈銆備竴涓爢鏍堝彲浠ラ氳繃“鍩哄湴鍧”鍜?#8220;鏍堥《”鍦板潃鏉ユ弿榪般傚叏灞鍙橀噺鍜岄潤(rùn)鎬佸彉閲忓垎閰嶅湪闈?rùn)鎬佹暟鎹尯錛屾湰鍦板彉閲忓垎閰嶅湪鍔ㄦ佹暟鎹尯錛屽嵆鍫嗘爤涓傜▼搴忛氳繃鍫嗘爤鐨勫熀鍦板潃鍜屽亸縐婚噺鏉ヨ闂湰鍦板彉閲忋?nbsp;
鈹溾斺斺斺斺斺斺斺敜浣庣鍐呭瓨鍖哄煙
鈹?nbsp;…… 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;鍔ㄦ佹暟鎹尯 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;…… 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;浠g爜鍖?nbsp;鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;闈?rùn)鎬佹暟鎹尯 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;…… 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜楂樼鍐呭瓨鍖哄煙
鍫嗘爤鏄竴涓厛榪涘悗鍑虹殑鏁版嵁緇撴瀯錛屾爤欏跺湴鍧鎬繪槸灝忎簬絳変簬鏍堢殑鍩哄湴鍧銆傛垜浠彲浠ュ厛浜?jiǎn)瑙d竴涓嬪嚱鏁拌皟鐢ㄧ殑榪囩▼錛屼互渚垮鍫嗘爤鍦ㄧ▼搴忎腑鐨勪綔鐢ㄦ湁鏇存繁鍏ョ殑浜?jiǎn)瑙c備笉鍚岀殑璇█鏈変笉鍚岀殑鍑芥暟璋冪敤瑙勫畾錛岃繖浜涘洜绱犳湁鍙傛暟鐨勫帇鍏ヨ鍒欏拰鍫嗘爤鐨勫鉤琛°倃indows API鐨勮皟鐢ㄨ鍒欏拰ANSI C鐨勫嚱鏁拌皟鐢ㄨ鍒欐槸涓嶄竴鏍風(fēng)殑錛屽墠鑰呯敱琚皟鍑芥暟璋冩暣鍫嗘爤錛屽悗鑰呯敱璋冪敤鑰呰皟鏁村爢鏍堛備袱鑰呴氳繃“__stdcall”鍜?#8220;__cdecl”鍓嶇紑鍖哄垎銆傚厛鐪嬩笅闈㈣繖孌典唬鐮侊細(xì)
#include <stdio.h>
void __stdcall func(int param1,int param2,int param3)
{
int var1=param1;
int var2=param2;
int var3=param3;
printf("0x%08x\n",¶m1); //鎵撳嵃鍑哄悇涓彉閲忕殑鍐呭瓨鍦板潃
printf("0x%08x\n",¶m2);
printf("0x%08x\n\n",¶m3);
printf("0x%08x\n",&var1);
printf("0x%08x\n",&var2);
printf("0x%08x\n\n",&var3);
return;
}
int main()
{
func(1,2,3);
return 0;
}
緙栬瘧鍚庣殑鎵ц緇撴灉鏄細(xì)
0x0012ff78
0x0012ff7c
0x0012ff80
0x0012ff68
0x0012ff6c
0x0012ff70
鈹溾斺斺斺斺斺斺斺敜<鈥斿嚱鏁版墽琛屾椂鐨勬爤欏訛紙ESP錛夈佷綆绔唴瀛樺尯鍩?nbsp;
鈹?nbsp;…… 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;var 1 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;var 2 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;var 3 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;RET 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜<鈥?#8220;__cdecl”鍑芥暟榪斿洖鍚庣殑鏍堥《錛圗SP錛?nbsp;
鈹?nbsp;parameter 1 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;parameter 2 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;parameter 3 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜<鈥?#8220;__stdcall”鍑芥暟榪斿洖鍚庣殑鏍堥《錛圗SP錛?nbsp;
鈹?nbsp;…… 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜<鈥旀爤搴曪紙鍩哄湴鍧 EBP錛夈侀珮绔唴瀛樺尯鍩?nbsp;
涓婂浘灝辨槸鍑芥暟璋冪敤榪囩▼涓爢鏍堢殑鏍峰瓙浜?jiǎn)銆傞鍏堬紝涓変釜鍙傛暟浠ヤ粠鍙堝埌宸︾殑嬈″簭鍘嬪叆鍫嗘爤錛屽厛鍘?#8220;param3”錛屽啀鍘?#8220;param2”錛屾渶鍚庡帇鍏?#8220;param1”錛涚劧鍚庡帇鍏ュ嚱鏁扮殑榪斿洖鍦板潃(RET)錛屾帴鐫璺寵漿鍒板嚱鏁板湴鍧鎺ョ潃鎵ц錛堣繖閲岃琛ュ厖涓鐐癸紝浠嬬粛UNIX涓嬬殑緙撳啿婧㈠嚭鍘熺悊鐨勬枃绔犱腑閮芥彁鍒板湪鍘嬪叆RET鍚庯紝緇х畫(huà)鍘嬪叆褰撳墠EBP錛岀劧鍚庣敤褰撳墠ESP浠f浛EBP銆傜劧鑰岋紝鏈変竴綃囦粙緇峸indows涓嬪嚱鏁拌皟鐢ㄧ殑鏂囩珷涓錛屽湪windows涓嬬殑鍑芥暟璋冪敤涔熸湁榪欎竴姝ラ錛屼絾鏍規(guī)嵁鎴戠殑瀹為檯璋冭瘯錛屽茍鏈彂鐜拌繖涓姝ワ紝榪欒繕鍙互浠巔aram3鍜寁ar1涔嬮棿鍙湁4瀛楄妭鐨勯棿闅欒繖鐐圭湅鍑烘潵錛夛紱絎笁姝ワ紝灝嗘爤欏?ESP)鍑忓幓涓涓暟錛屼負(fù)鏈湴鍙橀噺鍒嗛厤鍐呭瓨絀洪棿錛屼笂渚嬩腑鏄噺鍘?2瀛楄妭(ESP=ESP-3*4錛屾瘡涓猧nt鍙橀噺鍗犵敤4涓瓧鑺?錛涙帴鐫灝卞垵濮嬪寲鏈湴鍙橀噺鐨勫唴瀛樼┖闂淬傜敱浜?#8220;__stdcall”璋冪敤鐢辮璋冨嚱鏁拌皟鏁村爢鏍堬紝鎵浠ュ湪鍑芥暟榪斿洖鍓嶈鎭㈠鍫嗘爤錛屽厛鍥炴敹鏈湴鍙橀噺鍗犵敤鐨勫唴瀛?ESP=ESP+3*4)錛岀劧鍚庡彇鍑?guó)櫩斿洖鍦板潃錛屽~鍏IP瀵勫瓨鍣紝鍥炴敹鍏堝墠鍘嬪叆鍙傛暟鍗犵敤鐨勫唴瀛?ESP=ESP+3*4)錛岀戶(hù)緇墽琛岃皟鐢ㄨ呯殑浠g爜銆傚弬瑙佷笅鍒楁眹緙栦唬鐮侊細(xì)
;--------------func 鍑芥暟鐨勬眹緙栦唬鐮?------------------
:00401000 83EC0C sub esp, 0000000C //鍒涘緩鏈湴鍙橀噺鐨勫唴瀛樼┖闂?nbsp;
:00401003 8B442410 mov eax, dword ptr [esp+10]
:00401007 8B4C2414 mov ecx, dword ptr [esp+14]
:0040100B 8B542418 mov edx, dword ptr [esp+18]
:0040100F 89442400 mov dword ptr [esp], eax
:00401013 8D442410 lea eax, dword ptr [esp+10]
:00401017 894C2404 mov dword ptr [esp+04], ecx
……………………錛堢渷鐣ヨ嫢騫蹭唬鐮侊級(jí)
:00401075 83C43C add esp, 0000003C ;鎭㈠鍫嗘爤錛屽洖鏀舵湰鍦板彉閲忕殑鍐呭瓨絀洪棿
:00401078 C3 ret 000C ;鍑芥暟榪斿洖錛屾仮澶嶅弬鏁板崰鐢ㄧ殑鍐呭瓨絀洪棿
;濡傛灉鏄?#8220;__cdecl”鐨勮瘽錛岃繖閲屾槸“ret”錛屽爢鏍堝皢鐢辮皟鐢ㄨ呮仮澶?nbsp;
;-------------------鍑芥暟緇撴潫-------------------------
;--------------涓葷▼搴忚皟鐢╢unc鍑芥暟鐨勪唬鐮?-------------
:00401080 6A03 push 00000003 //鍘嬪叆鍙傛暟param3
:00401082 6A02 push 00000002 //鍘嬪叆鍙傛暟param2
:00401084 6A01 push 00000001 //鍘嬪叆鍙傛暟param1
:00401086 E875FFFFFF call 00401000 //璋冪敤func鍑芥暟
;濡傛灉鏄?#8220;__cdecl”鐨勮瘽錛屽皢鍦ㄨ繖閲屾仮澶嶅爢鏍堬紝“add esp, 0000000C”
鑱槑鐨勮鑰呯湅鍒拌繖閲岋紝宸笉澶氬氨鏄庣櫧緙撳啿婧㈠嚭鐨勫師鐞嗕簡(jiǎn)銆傚厛鏉ョ湅涓嬮潰鐨勪唬鐮侊細(xì)
#include <stdio.h>
#include <string.h>
void __stdcall func()
{
char lpBuff[8]="\0";
strcat(lpBuff,"AAAAAAAAAAA");
return;
}
int main()
{
func();
return 0;
}
緙栬瘧鍚庢墽琛屼竴涓嬪洖鎬庝箞鏍鳳紵鍝堬紝“"0x00414141"鎸囦護(hù)寮曠敤鐨?0x00000000"鍐呭瓨銆傝鍐呭瓨?shù)笉鑳戒?read"銆?#8221;錛?#8220;闈炴硶鎿嶄綔”鍠斤紒"41"灝辨槸"A"鐨?6榪涘埗鐨凙SCII鐮佷簡(jiǎn)錛岄偅鏄庢樉灝辨槸strcat榪欏彞鍑虹殑闂?shù)簡(jiǎn)銆?lpBuff"鐨勫ぇ灝忓彧鏈?瀛楄妭錛岀畻榪涚粨灝劇殑\0錛岄偅strcat鏈澶氬彧鑳藉啓鍏?涓?A"錛屼絾紼嬪簭瀹為檯鍐欏叆浜?1涓?A"澶栧姞1涓猏0銆傚啀鏉ョ湅鐪嬩笂闈㈤偅騫呭浘錛屽鍑烘潵鐨?涓瓧鑺傛濂借鐩栦簡(jiǎn)RET鐨勬墍鍦ㄧ殑鍐呭瓨絀洪棿錛屽鑷村嚱鏁拌繑鍥炲埌涓涓敊璇殑鍐呭瓨鍦板潃錛屾墽琛屼簡(jiǎn)閿欒鐨勬寚浠ゃ傚鏋滆兘綺懼績(jī)鏋勯犺繖涓瓧絎︿覆錛屼嬌瀹冨垎鎴愪笁閮ㄥ垎錛屽墠涓閮ㄤ喚浠呬粎鏄~鍏呯殑鏃犳剰涔夋暟鎹互杈懼埌婧㈠嚭鐨勭洰鐨勶紝鎺ョ潃鏄竴涓鐩朢ET鐨勬暟鎹紝绱ф帴鐫鏄竴孌祍hellcode錛岄偅鍙鐫涓猂ET鍦板潃鑳芥寚鍚戣繖孌祍hellcode鐨勭涓涓寚浠わ紝閭e嚱鏁拌繑鍥炴椂灝辮兘鎵цshellcode浜?jiǎn)銆備絾鏄蔣浠剁殑涓嶅悓鐗堟湰鍜屼笉鍚岀殑榪愯鐜閮藉彲鑳藉獎(jiǎng)鍝嶈繖孌祍hellcode鍦ㄥ唴瀛樹(shù)腑鐨勪綅緗紝閭d箞瑕佹瀯閫犺繖涓猂ET鏄崄鍒嗗洶闅劇殑銆備竴鑸兘鍦≧ET鍜宻hellcode涔嬮棿濉厖澶ч噺鐨凬OP鎸囦護(hù)錛屼嬌寰梕xploit鏈夋洿寮虹殑閫氱敤鎬с?nbsp;
鈹溾斺斺斺斺斺斺斺敜<鈥斾綆绔唴瀛樺尯鍩?nbsp;
鈹?nbsp;…… 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜<鈥旂敱exploit濉叆鏁版嵁鐨勫紑濮?nbsp;
鈹?nbsp;鈹?nbsp;
鈹?nbsp;buffer 鈹?lt;鈥斿~鍏ユ棤鐢ㄧ殑鏁版嵁
鈹?nbsp;鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;RET 鈹?lt;鈥旀寚鍚憇hellcode錛屾垨NOP鎸囦護(hù)鐨勮寖鍥?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;NOP 鈹?nbsp;
鈹?nbsp;…… 鈹?lt;鈥斿~鍏ョ殑NOP鎸囦護(hù)錛屾槸RET鍙寚鍚戠殑鑼冨洿
鈹?nbsp;NOP 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜
鈹?nbsp;鈹?nbsp;
鈹?nbsp;shellcode 鈹?nbsp;
鈹?nbsp;鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜<鈥旂敱exploit濉叆鏁版嵁鐨勭粨鏉?nbsp;
鈹?nbsp;…… 鈹?nbsp;
鈹溾斺斺斺斺斺斺斺敜<鈥旈珮绔唴瀛樺尯鍩?nbsp;
windows涓嬬殑鍔ㄦ佹暟鎹櫎浜?jiǎn)鍙瓨鏀惧湪鏍堜腑锛寴q樺彲浠ュ瓨鏀懼湪鍫嗕腑銆備簡(jiǎn)瑙++鐨勬湅鍙嬮兘鐭ラ亾錛孋++鍙互浣跨敤new鍏抽敭瀛楁潵鍔ㄦ佸垎閰嶅唴瀛樸傛潵鐪嬩笅闈㈢殑C++浠g爜錛?nbsp;
#include <stdio.h>
#include <iostream.h>
#include <windows.h>
void func()
{
char *buffer=new char[128];
char bufflocal[128];
static char buffstatic[128];
printf("0x%08x\n",buffer); //鎵撳嵃鍫嗕腑鍙橀噺鐨勫唴瀛樺湴鍧
printf("0x%08x\n",bufflocal); //鎵撳嵃鏈湴鍙橀噺鐨勫唴瀛樺湴鍧
printf("0x%08x\n",buffstatic); //鎵撳嵃闈?rùn)鎬佸彉閲忕殑鍐呭瓨鍦板潃
}
void main()
{
func();
return;
}
紼嬪簭鎵ц緇撴灉涓猴細(xì)
0x004107d0
0x0012ff04
0x004068c0
鍙互鍙戠幇鐢╪ew鍏抽敭瀛楀垎閰嶇殑鍐呭瓨鍗充笉鍦ㄦ爤涓紝涔熶笉鍦ㄩ潤(rùn)鎬佹暟鎹尯銆俈C緙栬瘧鍣ㄦ槸閫氳繃windows涓嬬殑“鍫?heap)”鏉ュ疄鐜皀ew鍏抽敭瀛楃殑鍐呭瓨鍔ㄦ佸垎閰嶃傚湪璁?#8220;鍫?#8221;涔嬪墠錛屽厛鏉ヤ簡(jiǎn)瑙d竴涓嬪拰“鍫?#8221;鏈夊叧鐨勫嚑涓狝PI鍑芥暟錛?nbsp;
HeapAlloc 鍦ㄥ爢涓敵璇峰唴瀛樼┖闂?nbsp;
HeapCreate 鍒涘緩涓涓柊鐨勫爢瀵硅薄
HeapDestroy 閿姣佷竴涓爢瀵硅薄
HeapFree 閲婃斁鐢寵鐨勫唴瀛?nbsp;
HeapWalk 鏋氫婦鍫嗗璞$殑鎵鏈夊唴瀛樺潡
GetProcessHeap 鍙栧緱榪涚▼鐨勯粯璁ゅ爢瀵硅薄
GetProcessHeaps 鍙栧緱榪涚▼鎵鏈夌殑鍫嗗璞?nbsp;
LocalAlloc
GlobalAlloc
褰撹繘紼嬪垵濮嬪寲鏃訛紝緋葷粺浼?xì)鑷姩湄?fù)榪涚▼鍒涘緩涓涓粯璁ゅ爢錛岃繖涓爢榛樿鎵鍗犲唴瀛樼殑澶у皬涓?M銆傚爢瀵硅薄鐢辯郴緇熻繘琛岀鐞嗭紝瀹冨湪鍐呭瓨?shù)腑浠ラ搼旨従l撴瀯瀛樺湪銆傞氳繃涓嬮潰鐨勪唬鐮佸彲浠ラ氳繃鍫嗗姩鎬佺敵璇峰唴瀛樼┖闂達(dá)細(xì)
HANDLE hHeap=GetProcessHeap();
char *buff=HeapAlloc(hHeap,0,8);
鍏朵腑h(huán)Heap鏄爢瀵硅薄鐨勫彞鏌勶紝buff鏄寚鍚戠敵璇風(fēng)殑鍐呭瓨絀洪棿鐨勫湴鍧銆傞偅榪欎釜hHeap絀剁珶鏄粈涔堝憿錛熷畠鐨勫兼湁浠涔堟剰涔夊悧錛熺湅鐪嬩笅闈㈣繖孌典唬鐮佸惂錛?nbsp;
#pragma comment(linker,"/entry:main") //瀹氫箟紼嬪簭鐨勫叆鍙?nbsp;
#include <windows.h>
_CRTIMP int (__cdecl *printf)(const char *, ...); //瀹氫箟STL鍑芥暟printf
/*---------------------------------------------------------------------------
鍐欏埌榪欓噷錛屾垜浠『渚挎潵澶嶄範(fàn)涓涓嬪墠闈㈡墍璁茬殑鐭ヨ瘑錛?nbsp;
(*娉?printf鍑芥暟鏄疌璇█鐨勬爣鍑嗗嚱鏁板簱涓嚱鏁幫紝VC鐨勬爣鍑嗗嚱鏁板簱鐢眒svcrt.dll妯″潡瀹炵幇銆?nbsp;
鐢卞嚱鏁板畾涔夊彲瑙侊紝printf鐨勫弬鏁頒釜鏁版槸鍙彉鐨勶紝鍑芥暟鍐呴儴鏃犳硶棰勫厛鐭ラ亾璋冪敤鑰呭帇鍏ョ殑鍙傛暟涓暟錛屽嚱鏁板彧鑳介氳繃鍒嗘瀽絎竴涓弬鏁板瓧絎︿覆鐨勬牸寮忔潵鑾峰緱鍘嬪叆鍙傛暟鐨勪俊鎭紝鐢變簬榪欓噷鍙傛暟鐨勪釜鏁版槸鍔ㄦ佺殑錛屾墍浠ュ繀欏葷敱璋冪敤鑰呮潵騫寵 鍫嗘爤錛岃繖閲屼究浣跨敤浜?jiǎn)__cdecl璋冪敤瑙勫垯銆侭TW錛學(xué)indows緋葷粺鐨凙PI鍑芥暟鍩烘湰涓婃槸__stdcall璋冪敤褰㈠紡錛屽彧鏈変竴涓狝PI渚嬪錛岄偅灝辨槸wsprintf錛屽畠浣跨敤__cdecl璋冪敤瑙勫垯錛屽悓printf鍑芥暟涓鏍鳳紝榪欐槸鐢變簬瀹冪殑鍙傛暟涓暟鏄彲鍙樼殑緙樻晠銆?nbsp;
---------------------------------------------------------------------------*/
void main()
{
HANDLE hHeap=GetProcessHeap();
char *buff=HeapAlloc(hHeap,0,0x10);
char *buff2=HeapAlloc(hHeap,0,0x10);
HMODULE hMsvcrt=LoadLibrary("msvcrt.dll");
printf=(void *)GetProcAddress(hMsvcrt,"printf");
printf("0x%08x\n",hHeap);
printf("0x%08x\n",buff);
printf("0x%08x\n\n",buff2);
}
鎵ц緇撴灉涓猴細(xì)
0x00130000
0x00133100
0x00133118
hHeap鐨勫兼庝箞鍜岄偅涓猙uff鐨勫奸偅涔堟帴榪戝憿錛熷叾瀹瀐Heap榪欎釜鍙ユ焺灝辨槸鎸囧悜HEAP棣栭儴鐨勫湴鍧銆傚湪榪涚▼鐨勭敤鎴峰尯瀛樼潃涓涓彨PEB(榪涚▼鐜鍧?鐨勭粨鏋勶紝榪欎釜緇撴瀯涓瓨鏀劇潃涓浜涙湁鍏寵繘紼嬬殑閲嶈淇℃伅錛屽叾涓湪PEB棣栧湴鍧鍋忕Щ0x18澶勫瓨鏀劇殑ProcessHeap灝辨槸榪涚▼榛樿鍫嗙殑鍦板潃錛岃屽亸縐?x90澶勫瓨鏀句簡(jiǎn)鎸囧悜榪涚▼鎵鏈夊爢鐨勫湴鍧鍒楄〃鐨勬寚閽堛倃indows鏈夊緢澶欰PI閮戒嬌鐢ㄨ繘紼嬬殑榛樿鍫嗘潵瀛樻斁鍔ㄦ佹暟鎹紝濡倃indows 2000涓嬬殑鎵鏈堿NSI鐗堟湰鐨勫嚱鏁伴兘鏄湪榛樿鍫嗕腑鐢寵鍐呭瓨鏉ヨ漿鎹NSI瀛楃涓插埌Unicode瀛楃涓茬殑銆傚涓涓爢鐨勮闂槸欏哄簭榪涜鐨勶紝鍚屼竴鏃跺埢鍙兘鏈変竴涓嚎紼嬭闂爢涓殑鏁版嵁錛屽綋澶氫釜綰跨▼鍚屾椂鏈夎闂姹傛椂錛屽彧鑳芥帓闃熺瓑寰咃紝榪欐牱渚塊犳垚紼嬪簭鎵ц鏁堢巼涓嬮檷銆?nbsp;
鏈鍚庢潵璇磋鍐呭瓨?shù)腑鐨勬暟鎹瘹w綈銆傛墍浣嶆暟鎹榻愶紝鏄寚鏁版嵁鎵鍦ㄧ殑鍐呭瓨鍦板潃蹇呴』鏄鏁版嵁闀垮害鐨勬暣鏁板嶏紝DWORD鏁版嵁鐨勫唴瀛樿搗濮嬪湴鍧鑳借4闄ゅ敖錛學(xué)ORD鏁版嵁鐨勫唴瀛樿搗濮嬪湴鍧鑳借2闄ゅ敖錛寈86 CPU鑳界洿鎺ヨ闂榻愮殑鏁版嵁錛屽綋浠栬瘯鍥捐闂竴涓湭瀵歸綈鐨勬暟鎹椂錛屼細(xì)鍦ㄥ唴閮ㄨ繘琛屼竴緋誨垪鐨勮皟鏁達(dá)紝榪欎簺璋冩暣瀵逛簬紼嬪簭鏉ヨ鏄忔槑鐨勶紝浣嗘槸浼?xì)闄嶄綆杩愯閫熷害錛屾墍浠ョ紪璇戝櫒鍦ㄧ紪璇戠▼搴忔椂浼?xì)灏介噺淇濊瘉鏁版嵁瀵归綈銆傚悓鏍蜂竴孌典唬鐮侊紝鎴戜滑鏉ョ湅鐪嬬敤VC銆丏ev-C++鍜宭cc涓変釜涓嶅悓緙栬瘧鍣ㄧ紪璇戝嚭鏉ョ殑紼嬪簭鐨勬墽琛岀粨鏋滐細(xì)
#include <stdio.h>
int main()
{
int a;
char b;
int c;
printf("0x%08x\n",&a);
printf("0x%08x\n",&b);
printf("0x%08x\n",&c);
return 0;
}
榪欐槸鐢╒C緙栬瘧鍚庣殑鎵ц緇撴灉錛?nbsp;
0x0012ff7c
0x0012ff7b
0x0012ff80
鍙橀噺鍦ㄥ唴瀛樹(shù)腑鐨勯『搴忥細(xì)b(1瀛楄妭)-a(4瀛楄妭)-c(4瀛楄妭)銆?nbsp;
榪欐槸鐢―ev-C++緙栬瘧鍚庣殑鎵ц緇撴灉錛?nbsp;
0x0022ff7c
0x0022ff7b
0x0022ff74
鍙橀噺鍦ㄥ唴瀛樹(shù)腑鐨勯『搴忥細(xì)c(4瀛楄妭)-涓棿鐩擱殧3瀛楄妭-b(鍗?瀛楄妭)-a(4瀛楄妭)銆?nbsp;
榪欐槸鐢╨cc緙栬瘧鍚庣殑鎵ц緇撴灉錛?nbsp;
0x0012ff6c
0x0012ff6b
0x0012ff64
鍙橀噺鍦ㄥ唴瀛樹(shù)腑鐨勯『搴忥細(xì)鍚屼笂銆?nbsp;
涓変釜緙栬瘧鍣ㄩ兘鍋氬埌浜?jiǎn)鏁版嵁瀵归綈锛屼絾鏄悗涓や釜缂栬瘧鍣ㄦ槃舵病VC“鑱槑”錛岃涓涓猚har鍗犱簡(jiǎn)4瀛楄妭錛屾氮璐瑰唴瀛樺摝銆?nbsp;
鍩虹鐭ヨ瘑錛?nbsp;
鍫嗘爤鏄竴縐嶇畝鍗曠殑鏁版嵁緇撴瀯錛屾槸涓縐嶅彧鍏佽鍦ㄥ叾涓绔繘琛屾彃鍏ユ垨鍒犻櫎鐨勭嚎鎬ц〃銆傚厑璁告彃鍏ユ垨鍒犻櫎鎿嶄綔鐨勪竴绔О涓烘爤欏訛紝鍙︿竴绔О涓烘爤搴曪紝瀵瑰爢鏍堢殑鎻掑叆鍜屽垹闄ゆ搷浣滆縐頒負(fù)鍏ユ爤鍜屽嚭鏍堛傛湁涓緇凜PU鎸囦護(hù)鍙互瀹炵幇瀵硅繘紼嬬殑鍐呭瓨瀹炵幇鍫嗘爤璁塊棶銆傚叾涓紝POP鎸囦護(hù)瀹炵幇鍑烘爤鎿嶄綔錛孭USH鎸囦護(hù)瀹炵幇鍏ユ爤鎿嶄綔銆侰PU鐨凟SP瀵勫瓨鍣ㄥ瓨鏀懼綋鍓嶇嚎紼嬬殑鏍堥《鎸囬拡錛孍BP瀵勫瓨鍣ㄤ腑淇濆瓨褰撳墠綰跨▼鐨勬爤搴曟寚閽堛侰PU鐨凟IP瀵勫瓨鍣ㄥ瓨鏀句笅涓涓狢PU鎸囦護(hù)瀛樻斁鐨勫唴瀛樺湴鍧錛屽綋CPU鎵ц瀹屽綋鍓嶇殑鎸囦護(hù)鍚庯紝浠嶦IP瀵勫瓨鍣ㄤ腑璇誨彇涓嬩竴鏉℃寚浠ょ殑鍐呭瓨鍦板潃錛岀劧鍚庣戶(hù)緇墽琛屻?nbsp;
鍙傝冿細(xì)銆奧indows涓嬬殑HEAP婧㈠嚭鍙?qiáng)鍏跺埄鐢ㄣ媌y: isno
銆妛indows鏍稿績(jī)緙栫▼銆媌y: Jeffrey Richter
鎽樿錛?nbsp;璁ㄨ甯歌鐨勫爢鎬ц兘闂?shù)互鍙?qiáng)濡備綍闃茶寖瀹冧滑銆傦紙鍏?nbsp;9 欏碉級(jí)
鍓嶈█
鎮(zhèn)ㄦ槸鍚︽槸鍔ㄦ佸垎閰嶇殑 C/C++ 瀵硅薄蹇犲疄涓斿垢榪愮殑鐢ㄦ埛錛熸?zhèn)ㄦ槸鍚﹀湪妯″潡闂寸殑寰(xiàn)榪旈氫俊涓綣佸湴浣跨敤浜?#8220;鑷姩鍖?#8221;錛熸?zhèn)ㄧ殑绋嬪簭鏄惁鍥犲爢鍒嗛厤鑰岃繍琛岃搗鏉ュ緢鎱紵涓嶄粎浠呮?zhèn)ㄩ亣鍒皹q欐牱鐨勯棶棰樸傚嚑涔庢墍鏈夐」鐩繜鏃╅兘浼?xì)閬囧埌鍫嗛棶棰樸傚ぇ瀹墮兘鎯寵錛?#8220;鎴戠殑浠g爜鐪熸濂斤紝鍙槸鍫嗗お鎱?#8221;銆傞偅鍙槸閮ㄥ垎姝g‘銆傛洿娣卞叆鐞嗚В鍫嗗強(qiáng)鍏剁敤娉曘佷互鍙?qiáng)浼?xì)鍙戠敓浠涔堥棶棰橈紝鏄緢鏈夌敤鐨勩?/p>
浠涔堟槸鍫嗭紵
錛堝鏋滄?zhèn)ㄥ凡缁忕煡閬撲粈涔堟槸鍫嗭紝鍙互璺沖埌“浠涔堟槸甯歌鐨勫爢鎬ц兘闂錛?#8221;閮ㄥ垎錛?/p>
鍦ㄧ▼搴忎腑錛屼嬌鐢ㄥ爢鏉ュ姩鎬佸垎閰嶅拰閲婃斁瀵硅薄銆傚湪涓嬪垪鎯呭喌涓嬶紝璋冪敤鍫嗘搷浣滐細(xì)
浜嬪厛涓嶇煡閬撶▼搴忔墍闇瀵硅薄鐨勬暟閲忓拰澶у皬銆?/p>
瀵硅薄澶ぇ鑰屼笉閫傚悎鍫嗘爤鍒嗛厤紼嬪簭銆?br>鍫嗕嬌鐢ㄤ簡(jiǎn)鍦ㄨ繍琛屾椂鍒嗛厤緇欎唬鐮佸拰鍫嗘爤鐨勫唴瀛樹(shù)箣澶栫殑閮ㄥ垎鍐呭瓨銆備笅鍥劇粰鍑轟簡(jiǎn)鍫嗗垎閰嶇▼搴忕殑涓嶅悓灞傘?br>
GlobalAlloc/GlobalFree錛歁icrosoft Win32 鍫嗚皟鐢紝榪欎簺璋冪敤鐩存帴涓庢瘡涓繘紼嬬殑榛樿鍫嗚繘琛屽璇濄?/p>
LocalAlloc/LocalFree錛歐in32 鍫嗚皟鐢紙涓轟簡(jiǎn)涓?nbsp;Microsoft Windows NT 鍏煎錛夛紝榪欎簺璋冪敤鐩存帴涓庢瘡涓繘紼嬬殑榛樿鍫嗚繘琛屽璇濄?/p>
COM 鐨?nbsp;IMalloc 鍒嗛厤紼嬪簭錛堟垨 CoTaskMemAlloc / CoTaskMemFree錛夛細(xì)鍑芥暟浣跨敤姣忎釜榪涚▼鐨勯粯璁ゅ爢銆傝嚜鍔ㄥ寲紼嬪簭浣跨敤“緇勪歡瀵硅薄妯″瀷 (COM)”鐨勫垎閰嶇▼搴忥紝鑰岀敵璇風(fēng)殑紼嬪簭浣跨敤姣忎釜榪涚▼鍫嗐?/p>
C/C++ 榪愯鏃?nbsp;(CRT) 鍒嗛厤紼嬪簭錛氭彁渚涗簡(jiǎn) malloc() 鍜?nbsp;free() 浠ュ強(qiáng) new 鍜?nbsp;delete 鎿嶄綔絎︺傚 Microsoft Visual Basic 鍜?nbsp;Java 絳夎璦涔熸彁渚涗簡(jiǎn)鏂扮殑鎿嶄綔絎﹀茍浣跨敤鍨冨溇鏀墮泦鏉ヤ唬鏇垮爢銆侰RT 鍒涘緩鑷繁鐨勭鏈夊爢錛岄┗鐣欏湪 Win32 鍫嗙殑欏墮儴銆?/p>
Windows NT 涓紝W(xué)in32 鍫嗘槸 Windows NT 榪愯鏃跺垎閰嶇▼搴忓懆鍥寸殑钖勫眰銆傛墍鏈?nbsp;API 杞彂瀹冧滑鐨勮姹傜粰 NTDLL銆?/p>
Windows NT 榪愯鏃跺垎閰嶇▼搴忔彁渚?nbsp;Windows NT 鍐呯殑鏍稿績(jī)鍫嗗垎閰嶇▼搴忋傚畠鐢卞叿鏈?nbsp;128 涓ぇ灝忎粠 8 鍒?nbsp;1,024 瀛楄妭鐨勭┖闂插垪琛ㄧ殑鍓嶇鍒嗛厤紼嬪簭緇勬垚銆傚悗绔垎閰嶇▼搴忎嬌鐢ㄨ櫄鎷熷唴瀛樻潵淇濈暀鍜屾彁浜ら〉銆?/p>
鍦ㄥ浘琛ㄧ殑搴曢儴鏄?#8220;铏氭嫙鍐呭瓨鍒嗛厤紼嬪簭”錛屾搷浣滅郴緇熶嬌鐢ㄥ畠鏉ヤ繚鐣欏拰鎻愪氦欏點(diǎn)傛墍鏈夊垎閰嶇▼搴忎嬌鐢ㄨ櫄鎷熷唴瀛樿繘琛屾暟鎹殑瀛樺彇銆?/p>
鍒嗛厤鍜岄噴鏀懼潡涓嶅氨閭d箞綆鍗曞悧錛熶負(fù)浣曡姳璐硅繖涔堥暱鏃墮棿錛?/p>
鍫嗗疄鐜扮殑娉ㄦ剰浜嬮」
浼犵粺涓婏紝鎿嶄綔緋葷粺鍜岃繍琛屾椂搴撴槸涓庡爢鐨勫疄鐜板叡瀛樼殑銆傚湪涓涓繘紼嬬殑寮濮嬶紝鎿嶄綔緋葷粺鍒涘緩涓涓粯璁ゅ爢錛屽彨鍋?#8220;榪涚▼鍫?#8221;銆傚鏋滄病鏈夊叾浠栧爢鍙嬌鐢紝鍒欏潡鐨勫垎閰嶄嬌鐢?#8220;榪涚▼鍫?#8221;銆傝璦榪愯鏃朵篃鑳藉湪榪涚▼鍐呭垱寤哄崟鐙殑鍫嗐傦紙渚嬪錛孋 榪愯鏃跺垱寤哄畠鑷繁鐨勫爢銆傦級(jí)闄よ繖浜涗笓鐢ㄧ殑鍫嗗錛屽簲鐢ㄧ▼搴忔垨璁稿宸茶澆鍏ョ殑鍔ㄦ侀摼鎺ュ簱 (DLL) 涔嬩竴鍙互鍒涘緩鍜屼嬌鐢ㄥ崟鐙殑鍫嗐俉in32 鎻愪緵涓鏁村 API 鏉ュ垱寤哄拰浣跨敤縐佹湁鍫嗐傛湁鍏沖爢鍑芥暟錛堣嫳鏂囷級(jí)鐨勮灝芥寚瀵鹼紝璇峰弬瑙?nbsp;MSDN銆?/p>
褰撳簲鐢ㄧ▼搴忔垨 DLL 鍒涘緩縐佹湁鍫嗘椂錛岃繖浜涘爢瀛樺湪浜庤繘紼嬬┖闂達(dá)紝騫朵笖鍦ㄨ繘紼嬪唴鏄彲璁塊棶鐨勩備粠緇欏畾鍫嗗垎閰嶇殑鏁版嵁灝嗗湪鍚屼竴涓爢涓婇噴鏀俱傦紙涓嶈兘浠庝竴涓爢鍒嗛厤鑰屽湪鍙︿竴涓爢閲婃斁銆傦級(jí)
鍦ㄦ墍鏈夎櫄鎷熷唴瀛樼郴緇熶腑錛屽爢椹葷暀鍦ㄦ搷浣滅郴緇熺殑“铏氭嫙鍐呭瓨綆$悊鍣?#8221;鐨勯《閮ㄣ傝璦榪愯鏃跺爢涔熼┗鐣欏湪铏氭嫙鍐呭瓨欏墮儴銆傛煇浜涙儏鍐典笅錛岃繖浜涘爢鏄搷浣滅郴緇熷爢涓殑灞傦紝鑰岃璦榪愯鏃跺爢鍒欓氳繃澶у潡鐨勫垎閰嶆潵鎵ц鑷繁鐨勫唴瀛樼鐞嗐備笉浣跨敤鎿嶄綔緋葷粺鍫嗭紝鑰屼嬌鐢ㄨ櫄鎷熷唴瀛樺嚱鏁版洿鍒╀簬鍫嗙殑鍒嗛厤鍜屽潡鐨勪嬌鐢ㄣ?/p>
鍏稿瀷鐨勫爢瀹炵幇鐢卞墠銆佸悗绔垎閰嶇▼搴忕粍鎴愩傚墠绔垎閰嶇▼搴忕淮鎸佸浐瀹氬ぇ灝忓潡鐨勭┖闂插垪琛ㄣ傚浜庝竴嬈″垎閰嶈皟鐢紝鍫嗗皾璇曚粠鍓嶇鍒楄〃鎵懼埌涓涓嚜鐢卞潡銆傚鏋滃け璐ワ紝鍫嗚榪粠鍚庣錛堜繚鐣欏拰鎻愪氦铏氭嫙鍐呭瓨錛夊垎閰嶄竴涓ぇ鍧楁潵婊¤凍璇鋒眰銆傞氱敤鐨勫疄鐜版湁姣忓潡鍒嗛厤鐨勫紑閿錛岃繖灝嗚楄垂鎵ц鍛ㄦ湡錛屼篃鍑忓皯浜?jiǎn)鍙娇鐢ㄧ殑瀛樺偍绌洪棿銆?/p>
Knowledge Base 鏂囩珷 Q10758錛?#8220;鐢?nbsp;calloc() 鍜?nbsp;malloc() 綆$悊鍐呭瓨” 錛堟悳绱㈡枃绔犵紪鍙鳳級(jí), 鍖呭惈浜?jiǎn)鏈夊厡櫩欎簺涓婚鐨勬洿澶氳儗鏅煡璇嗐傚彟澶栵紝鏈夊叧鍫嗗疄鐜板拰璁捐鐨勮緇嗚璁轟篃鍙湪涓嬪垪钁椾綔涓壘鍒幫細(xì)“Dynamic Storage Allocation: A Survey and Critical Review”錛屼綔鑰?nbsp;Paul R. Wilson銆丮ark S. Johnstone銆丮ichael Neely 鍜?nbsp;David Boles錛?#8220;International Workshop on Memory Management”, 浣滆?nbsp;Kinross, Scotland, UK, 1995 騫?nbsp;9 鏈?
http://www.cs.utexas.edu/users/oops/papers.html)錛堣嫳鏂囷級(jí)銆?/p>
Windows NT 鐨勫疄鐜幫紙Windows NT 鐗堟湰 4.0 鍜屾洿鏂扮増鏈級(jí) 浣跨敤浜?nbsp;127 涓ぇ灝忎粠 8 鍒?nbsp;1,024 瀛楄妭鐨?nbsp;8 瀛楄妭瀵歸綈鍧楃┖闂插垪琛ㄥ拰涓涓?#8220;澶у潡”鍒楄〃銆?#8220;澶у潡”鍒楄〃錛堢┖闂插垪琛╗0]錛?nbsp;淇濆瓨澶т簬 1,024 瀛楄妭鐨勫潡銆傜┖闂插垪琛ㄥ綰充簡(jiǎn)鐢ㄥ弻鍚戦摼琛ㄩ摼鎺ュ湪涓璧風(fēng)殑瀵硅薄銆傞粯璁ゆ儏鍐典笅錛?#8220;榪涚▼鍫?#8221;鎵ц鏀墮泦鎿嶄綔銆傦紙鏀墮泦鏄皢鐩擱偦絀洪棽鍧楀悎騫舵垚涓涓ぇ鍧楃殑鎿嶄綔銆傦級(jí)鏀墮泦鑰楄垂浜?jiǎn)棰濆鐨勫懆鏈熷Q屼絾鍑忓皯浜?jiǎn)鍫嗗潡鐨勫唴閮剮鐗囥?/p>
鍗曚竴鍏ㄥ眬閿佷繚鎶ゅ爢錛岄槻姝㈠綰跨▼寮忕殑浣跨敤銆傦紙璇峰弬瑙?#8220;Server Performance and Scalability Killers”涓殑絎竴涓敞鎰忎簨欏? George Reilly 鎵钁楋紝鍦?nbsp;“MSDN Online Web Workshop”涓婏紙绔欑偣錛?img border=0 align=absMiddle src="http://club.5ivb.net/pic/url.gif">http://msdn.microsoft.com/workshop/server/iis/tencom.asp錛堣嫳鏂囷級(jí)銆傦級(jí)鍗曚竴鍏ㄥ眬閿佹湰璐ㄤ笂鏄敤鏉ヤ繚鎶ゅ爢鏁版嵁緇撴瀯錛岄槻姝㈣法澶氱嚎紼嬬殑闅忔満瀛樺彇銆傝嫢鍫嗘搷浣滃お棰戠箒錛屽崟涓鍏ㄥ眬閿佷細(xì)瀵規(guī)ц兘鏈変笉鍒╃殑褰卞搷銆?/p>
浠涔堟槸甯歌鐨勫爢鎬ц兘闂錛?br>浠ヤ笅鏄?zhèn)ㄤ娇鐢ㄥ爢鏃朵細(xì)閬囧埌鐨勬渶甯歌闂錛?nbsp;
鍒嗛厤鎿嶄綔閫犳垚鐨勯熷害鍑忔參銆傚厜鍒嗛厤灝辮楄垂寰堥暱鏃墮棿銆傛渶鍙兘瀵艱嚧榪愯閫熷害鍑忔參鍘熷洜鏄┖闂插垪琛ㄦ病鏈夊潡錛屾墍浠ヨ繍琛屾椂鍒嗛厤紼嬪簭浠g爜浼?xì)鑰楄垂鍛ㄦ湡瀵繪壘杈冨ぇ鐨勭┖闂插潡錛屾垨浠庡悗绔垎閰嶇▼搴忓垎閰嶆柊鍧椼?/p>
閲婃斁鎿嶄綔閫犳垚鐨勯熷害鍑忔參銆傞噴鏀炬搷浣滆楄垂杈冨鍛ㄦ湡錛屼富瑕佹槸鍚敤浜?jiǎn)鏀堕泦鎿嶄綔銆傛敹闆嗘湡闂達(dá)紝姣忎釜閲婃斁鎿嶄綔“鏌ユ壘”瀹冪殑鐩擱偦鍧楋紝鍙栧嚭瀹冧滑騫舵瀯閫犳垚杈冨ぇ鍧楋紝鐒跺悗鍐嶆妸姝よ緝澶у潡鎻掑叆絀洪棽鍒楄〃銆傚湪鏌ユ壘鏈熼棿錛屽唴瀛樺彲鑳戒細(xì)闅忔満紕板埌錛屼粠鑰屽鑷撮珮閫熺紦瀛樹(shù)笉鑳藉懡涓紝鎬ц兘闄嶄綆銆?/p>
鍫嗙珵浜夐犳垚鐨勯熷害鍑忔參銆傚綋涓や釜鎴栧涓嚎紼嬪悓鏃惰闂暟鎹紝鑰屼笖涓涓嚎紼嬬戶(hù)緇繘琛屼箣鍓嶅繀欏葷瓑寰呭彟涓涓嚎紼嬪畬鎴愭椂灝卞彂鐢熺珵浜夈傜珵浜夋繪槸瀵艱嚧楹葷儲(chǔ)錛涜繖涔熸槸鐩墠澶氬鐞嗗櫒緋葷粺閬囧埌鐨勬渶澶ч棶棰樸傚綋澶ч噺浣跨敤鍐呭瓨鍧楃殑搴旂敤紼嬪簭鎴?nbsp;DLL 浠ュ綰跨▼鏂瑰紡榪愯錛堟垨榪愯浜庡澶勭悊鍣ㄧ郴緇熶笂錛夋椂灝嗗鑷撮熷害鍑忔參銆傚崟涓閿佸畾鐨勪嬌鐢ㄢ斿父鐢ㄧ殑瑙e喅鏂規(guī)鈥旀剰鍛崇潃浣跨敤鍫嗙殑鎵鏈夋搷浣滄槸搴忓垪鍖栫殑銆傚綋絳夊緟閿佸畾鏃跺簭鍒楀寲浼?xì)寮曡碉L(fēng)嚎紼嬪垏鎹笂涓嬫枃銆傚彲浠ユ兂璞′氦鍙夎礬鍙i棯鐑佺殑綰㈢伅澶勮蛋璧板仠鍋滃鑷寸殑閫熷害鍑忔參銆?nbsp;
绔炰簤閫氬父浼?xì)瀵艰嚧绾拷E嬪拰榪涚▼鐨勪笂涓嬫枃鍒囨崲銆備笂涓嬫枃鍒囨崲鐨勫紑閿鏄緢澶х殑錛屼絾寮閿鏇村ぇ鐨勬槸鏁版嵁浠庡鐞嗗櫒楂橀熺紦瀛樹(shù)腑涓㈠け錛屼互鍙?qiáng)鍚庢潵绾拷E嬪媧繪椂鐨勬暟鎹噸寤恒?/p>
鍫嗙牬鍧忛犳垚鐨勯熷害鍑忔參銆傞犳垚鍫嗙牬鍧忕殑鍘熷洜鏄簲鐢ㄧ▼搴忓鍫嗗潡鐨勪笉姝g‘浣跨敤銆傞氬父鎯呭艦鍖呮嫭閲婃斁宸查噴鏀劇殑鍫嗗潡鎴栦嬌鐢ㄥ凡閲婃斁鐨勫爢鍧楋紝浠ュ強(qiáng)鍧楃殑瓚婄晫閲嶅啓絳夋槑鏄鵑棶棰樸傦紙鐮村潖涓嶅湪鏈枃璁ㄨ鑼冨洿涔嬪唴銆傛湁鍏沖唴瀛橀噸鍐欏拰娉勬紡絳夊叾浠栫粏鑺傦紝璇峰弬瑙?nbsp;Microsoft Visual C++(R) 璋冭瘯鏂囨。 銆傦級(jí)
棰戠箒鐨勫垎閰嶅拰閲嶅垎閰嶉犳垚鐨勯熷害鍑忔參銆傝繖鏄嬌鐢ㄨ剼鏈璦鏃墮潪甯告櫘閬嶇殑鐜拌薄銆傚瀛楃涓茶鍙嶅鍒嗛厤錛岄殢閲嶅垎閰嶅闀垮拰閲婃斁銆備笉瑕佽繖鏍峰仛錛屽鏋滃彲鑳斤紝灝介噺鍒嗛厤澶у瓧絎︿覆鍜屼嬌鐢ㄧ紦鍐插尯銆傚彟涓縐嶆柟娉曞氨鏄敖閲忓皯鐢ㄨ繛鎺ユ搷浣溿?br>绔炰簤鏄湪鍒嗛厤鍜岄噴鏀炬搷浣滀腑瀵艱嚧閫熷害鍑忔參鐨勯棶棰樸傜悊鎯蟲(chóng)儏鍐典笅錛屽笇鏈涗嬌鐢ㄦ病鏈夌珵浜夊拰蹇熷垎閰?閲婃斁鐨勫爢銆傚彲鎯滐紝鐜板湪榪樻病鏈夎繖鏍風(fēng)殑閫氱敤鍫嗭紝涔熻灝嗘潵浼?xì)鏈夈?/p>
鍦ㄦ墍鏈夌殑鏈嶅姟鍣ㄧ郴緇熶腑錛堝 IIS銆丮SProxy銆丏atabaseStacks銆佺綉緇滄湇鍔″櫒銆?nbsp;Exchange 鍜屽叾浠栵級(jí), 鍫嗛攣瀹氬疄鍦ㄦ槸涓ぇ鐡墮銆傚鐞嗗櫒鏁拌秺澶氾紝绔炰簤灝辮秺浼?xì)鎭跺寲銆?/p>
灝介噺鍑忓皯鍫嗙殑浣跨敤
鐜板湪鎮(zhèn)ㄦ槑鐧戒嬌鐢ㄥ爢鏃跺瓨鍦ㄧ殑闂?shù)簡(jiǎn)锛岄汏N亾鎮(zhèn)ㄤ笉鎯蟲(chóng)嫢鏈夎兘瑙e喅榪欎簺闂鐨勮秴綰ч瓟媯掑悧錛熸垜鍙笇鏈涙湁銆備絾娌℃湁欖旀硶鑳戒嬌鍫嗚繍琛屽姞蹇斿洜姝や笉瑕佹湡鏈涘湪浜у搧鍑?guó)櫞т箣鍓嶇殑鏈鍚庝竴鏄熸湡鑳藉澶т負(fù)鏀硅銆傚鏋滄彁鍓嶈鍒掑爢絳栫暐錛屾儏鍐靛皢浼?xì)澶уぇ濂借浆銆傝皟鏁翠嬌鐢ㄥ爢鐨勬柟娉曪紝鍑忓皯瀵瑰爢鐨勬搷浣滄槸鎻愰珮鎬ц兘鐨勮壇鏂廣?/p>
濡備綍鍑忓皯浣跨敤鍫嗘搷浣滐紵閫氳繃鍒╃敤鏁版嵁緇撴瀯鍐呯殑浣嶇疆鍙噺灝戝爢鎿嶄綔鐨勬鏁般傝鑰冭檻涓嬪垪瀹炰緥錛?/p>
struct ObjectA {
// objectA 鐨勬暟鎹?nbsp;
}
struct ObjectB {
// objectB 鐨勬暟鎹?nbsp;
}
// 鍚屾椂浣跨敤 objectA 鍜?nbsp;objectB
//
// 浣跨敤鎸囬拡
//
struct ObjectB {
struct ObjectA * pObjA;
// objectB 鐨勬暟鎹?nbsp;
}
//
// 浣跨敤宓屽叆
//
struct ObjectB {
struct ObjectA pObjA;
// objectB 鐨勬暟鎹?nbsp;
}
//
// 闆嗗悎 – 鍦ㄥ彟涓瀵硅薄鍐呬嬌鐢?nbsp;objectA 鍜?nbsp;objectB
//
struct ObjectX {
struct ObjectA objA;
struct ObjectB objB;
}
閬垮厤浣跨敤鎸囬拡鍏寵仈涓や釜鏁版嵁緇撴瀯銆傚鏋滀嬌鐢ㄦ寚閽堝叧鑱斾袱涓暟鎹粨鏋勶紝鍓嶉潰瀹炰緥涓殑瀵硅薄 A 鍜?nbsp;B 灝嗚鍒嗗埆鍒嗛厤鍜岄噴鏀俱傝繖浼?xì)澧炲姞棰濆寮閿鈥旀垜浠閬垮厤榪欑鍋氭硶銆?/p>
鎶婂甫鎸囬拡鐨勫瓙瀵硅薄宓屽叆鐖跺璞°傚綋瀵硅薄涓湁鎸囬拡鏃訛紝鍒欐剰鍛崇潃瀵硅薄涓湁鍔ㄦ佸厓绱狅紙鐧懼垎涔嬪叓鍗侊級(jí)鍜屾病鏈夊紩鐢ㄧ殑鏂頒綅緗傚祵鍏ュ鍔犱簡(jiǎn)浣嶇疆浠庤屽噺灝戜簡(jiǎn)榪涗竴姝ュ垎閰?閲婃斁鐨勯渶姹傘傝繖灝嗘彁楂樺簲鐢ㄧ▼搴忕殑鎬ц兘銆?/p>
鍚堝茍灝忓璞″艦鎴愬ぇ瀵硅薄錛堣仛鍚堬級(jí)銆傝仛鍚堝噺灝戝垎閰嶅拰閲婃斁鐨勫潡鐨勬暟閲忋傚鏋滄湁鍑犱釜寮鍙戣咃紝鍚勮嚜寮鍙戣璁$殑涓嶅悓閮ㄥ垎錛屽垯鏈緇堜細(xì)鏈夎澶氬皬瀵硅薄闇瑕佸悎騫躲傞泦鎴愮殑鎸?xiě)鎴槥鏄鎵惧埌姝<嫯鐨勮仛鍚堣竟鐣屻?/p>
鍐呰仈緙撳啿鍖鴻兘澶熸弧瓚崇櫨鍒嗕箣鍏崄鐨勯渶瑕侊紙aka 80-20 瑙勫垯錛夈備釜鍒儏鍐典笅錛岄渶瑕佸唴瀛樼紦鍐插尯鏉ヤ繚瀛樺瓧絎︿覆/浜岃繘鍒舵暟鎹紝浣嗕簨鍏堜笉鐭ラ亾鎬誨瓧鑺傛暟銆備及璁″茍鍐呰仈涓涓ぇ灝忚兘婊¤凍鐧懼垎涔嬪叓鍗侀渶瑕佺殑緙撳啿鍖恒傚鍓╀綑鐨勭櫨鍒嗕箣浜屽崄錛屽彲浠ュ垎閰嶄竴涓柊鐨勭紦鍐插尯鍜屾寚鍚戣繖涓紦鍐插尯鐨勬寚閽堛傝繖鏍鳳紝灝卞噺灝戝垎閰嶅拰閲婃斁璋冪敤騫跺鍔犳暟鎹殑浣嶇疆絀洪棿錛屼粠鏍規(guī)湰涓婃彁楂樹(shù)唬鐮佺殑鎬ц兘銆?/p>
鍦ㄥ潡涓垎閰嶅璞★紙鍧楀寲錛夈傚潡鍖栨槸浠ョ粍鐨勬柟寮忎竴嬈″垎閰嶅涓璞$殑鏂規(guī)硶銆傚鏋滃鍒楄〃鐨勯」榪炵畫(huà)璺熻釜錛屼緥濡傚涓涓?nbsp;{鍚嶇О錛屽紏 瀵圭殑鍒楄〃錛屾湁涓ょ閫夋嫨錛氶夋嫨涓鏄負(fù)姣忎竴涓?#8220;鍚嶇О-鍊?#8221;瀵瑰垎閰嶄竴涓妭鐐癸紱閫夋嫨浜屾槸鍒嗛厤涓涓兘瀹圭撼錛堝浜斾釜錛?#8220;鍚嶇О-鍊?#8221;瀵圭殑緇撴瀯銆備緥濡傦紝涓鑸儏鍐典笅錛屽鏋滃瓨鍌ㄥ洓瀵癸紝灝卞彲鍑忓皯鑺傜偣鐨勬暟閲忥紝濡傛灉闇瑕侀澶栫殑絀洪棿鏁伴噺錛屽垯浣跨敤闄勫姞鐨勯摼琛ㄦ寚閽堛?nbsp;
鍧楀寲鏄弸濂界殑澶勭悊鍣ㄩ珮閫熺紦瀛橈紝鐗瑰埆鏄浜?nbsp;L1-楂橀熺紦瀛橈紝鍥犱負(fù)瀹冩彁渚涗簡(jiǎn)澧炲姞鐨勪綅緗?nbsp;鈥斾笉鐢ㄨ瀵逛簬鍧楀垎閰嶏紝寰堝鏁版嵁鍧椾細(xì)鍦ㄥ悓涓涓櫄鎷熼〉涓?/p>
姝g‘浣跨敤 _amblksiz銆侰 榪愯鏃?nbsp;(CRT) 鏈夊畠鐨勮嚜瀹氫箟鍓嶇鍒嗛厤紼嬪簭錛岃鍒嗛厤紼嬪簭浠庡悗绔紙Win32 鍫嗭級(jí)鍒嗛厤澶у皬涓?nbsp;_amblksiz 鐨勫潡銆傚皢 _amblksiz 璁劇疆涓鴻緝楂樼殑鍊艱兘娼滃湪鍦板噺灝戝鍚庣鐨勮皟鐢ㄦ鏁般傝繖鍙騫挎硾浣跨敤 CRT 鐨勭▼搴忛傜敤銆?br>浣跨敤涓婅堪鎶鏈皢鑾峰緱鐨勫ソ澶勪細(xì)鍥犲璞$被鍨嬨佸ぇ灝忓強(qiáng)宸ヤ綔閲忚屾湁鎵涓嶅悓銆備絾鎬昏兘鍦ㄦц兘鍜屽彲鍗囩緝鎬ф柟闈㈡湁鎵鏀惰幏銆傚彟涓鏂歸潰錛屼唬鐮佷細(xì)鏈夌偣鐗規(guī)畩錛屼絾濡傛灉緇忚繃娣辨濈啛铏戯紝浠g爜榪樻槸寰堝鏄撶鐞嗙殑銆?/p>
鍏朵粬鎻愰珮鎬ц兘鐨勬妧鏈?br>涓嬮潰鏄竴浜涙彁楂橀熷害鐨勬妧鏈細(xì)
浣跨敤 Windows NT5 鍫?nbsp;
鐢變簬鍑犱釜鍚屼簨鐨勫姫鍔涘拰杈涘嫟宸ヤ綔錛?998 騫村垵 Microsoft Windows(R) 2000 涓湁浜?jiǎn)鍑犱釜閲嶅ぇ鏀箻q涳細(xì)
鏀硅繘浜?jiǎn)鍫嗕唬鐮佸唴鐨勯攣瀹氥傚爢浠g爜瀵規(guī)瘡鍫嗕竴涓攣銆傚叏灞閿佷繚鎶ゅ爢鏁版嵁緇撴瀯錛岄槻姝㈠綰跨▼寮忕殑浣跨敤銆備絾涓嶅垢鐨勬槸錛屽湪楂橀氫俊閲忕殑鎯呭喌涓嬶紝鍫嗕粛鍙楀洶浜庡叏灞閿侊紝瀵艱嚧楂樼珵浜夊拰浣庢ц兘銆俉indows 2000 涓紝閿佸唴浠g爜鐨勪復(fù)鐣屽尯灝嗙珵浜夌殑鍙兘鎬у噺鍒版渶灝?浠庤屾彁楂樹(shù)簡(jiǎn)鍙幾緙╂с?/p>
浣跨敤 “Lookaside”鍒楄〃銆傚爢鏁版嵁緇撴瀯瀵瑰潡鐨勬墍鏈夌┖闂查」浣跨敤浜?jiǎn)澶畯鍦?nbsp;8 鍒?nbsp;1,024 瀛楄妭錛堜互 8-瀛楄妭閫掑錛夌殑蹇熼珮閫熺紦瀛樸傚揩閫熼珮閫熺紦瀛樻渶鍒濅繚鎶ゅ湪鍏ㄥ眬閿佸唴銆傜幇鍦紝浣跨敤 lookaside 鍒楄〃鏉ヨ闂繖浜涘揩閫熼珮閫熺紦瀛樼┖闂插垪琛ㄣ傝繖浜涘垪琛ㄤ笉瑕佹眰閿佸畾錛岃屾槸浣跨敤 64 浣嶇殑浜掗攣鎿嶄綔錛屽洜姝ゆ彁楂樹(shù)簡(jiǎn)鎬ц兘銆?/p>
鍐呴儴鏁版嵁緇撴瀯綆楁硶涔熷緱鍒版敼榪涖?br>榪欎簺鏀硅繘閬垮厤浜?jiǎn)瀵瑰垎閰嶉珮閫熺紦瀛樼殑闇姹傦紝浣嗕笉鎺掗櫎鍏朵粬鐨勪紭鍖栥備嬌鐢?nbsp;Windows NT5 鍫嗚瘎浼版?zhèn)ㄧ殑浠g爜锛涘畠瀵篂畯浜?nbsp;1,024 瀛楄妭 (1 KB) 鐨勫潡錛堟潵鑷墠绔垎閰嶇▼搴忕殑鍧楋級(jí)鏄渶浣崇殑銆侴lobalAlloc() 鍜?nbsp;LocalAlloc() 寤虹珛鍦ㄥ悓涓鍫嗕笂錛屾槸瀛樺彇姣忎釜榪涚▼鍫嗙殑閫氱敤鏈哄埗銆傚鏋滃笇鏈涜幏寰楅珮鐨勫眬閮ㄦц兘錛屽垯浣跨敤 Heap(R) API 鏉ュ瓨鍙栨瘡涓繘紼嬪爢錛屾垨涓哄垎閰嶆搷浣滃垱寤鴻嚜宸辯殑鍫嗐傚鏋滈渶瑕佸澶у潡鎿嶄綔錛屼篃鍙互鐩存帴浣跨敤 VirtualAlloc() / VirtualFree() 鎿嶄綔銆?/p>
涓婅堪鏀硅繘宸插湪 Windows 2000 beta 2 鍜?nbsp;Windows NT 4.0 SP4 涓嬌鐢ㄣ傛敼榪涘悗錛屽爢閿佺殑绔炰簤鐜囨樉钁楅檷浣庛傝繖浣挎墍鏈?nbsp;Win32 鍫嗙殑鐩存帴鐢ㄦ埛鍙楃泭銆侰RT 鍫嗗緩绔嬩簬 Win32 鍫嗙殑欏墮儴錛屼絾瀹冧嬌鐢ㄨ嚜宸辯殑灝忓潡鍫嗭紝鍥犺屼笉鑳戒粠 Windows NT 鏀硅繘涓彈鐩娿傦紙Visual C++ 鐗堟湰 6.0 涔熸湁鏀硅繘鐨勫爢鍒嗛厤紼嬪簭銆傦級(jí)
浣跨敤鍒嗛厤楂橀熺紦瀛?nbsp;
鍒嗛厤楂橀熺紦瀛樺厑璁?dāng)R珮閫熺紦瀛樺垎閰嶇殑鍧楋紝浠ヤ究灝嗘潵閲嶇敤銆傝繖鑳藉鍑忓皯瀵硅繘紼嬪爢錛堟垨鍏ㄥ眬鍫嗭級(jí)鐨勫垎閰?閲婃斁璋冪敤鐨勬鏁幫紝涔熷厑璁告渶澶ч檺搴︾殑閲嶇敤鏇劇粡鍒嗛厤鐨勫潡銆傚彟澶栵紝鍒嗛厤楂橀熺紦瀛樺厑璁告敹闆嗙粺璁′俊鎭?浠ヤ究杈冨ソ鍦扮悊瑙e璞″湪杈冮珮灞傛涓婄殑浣跨敤銆?/p>
鍏稿瀷鍦幫紝鑷畾涔夊爢鍒嗛厤紼嬪簭鍦ㄨ繘紼嬪爢鐨勯《閮ㄥ疄鐜般傝嚜瀹氫箟鍫嗗垎閰嶇▼搴忎笌緋葷粺鍫嗙殑琛屼負(fù)寰堢浉浼箋備富瑕佺殑宸埆鏄畠鍦ㄨ繘紼嬪爢鐨勯《閮ㄤ負(fù)鍒嗛厤鐨勫璞℃彁渚涢珮閫熺紦瀛樸傞珮閫熺紦瀛樿璁℃垚涓濂楀浐瀹氬ぇ灝忥紙濡?nbsp;32 瀛楄妭銆?4 瀛楄妭銆?28 瀛楄妭絳夛級(jí)銆傝繖涓涓緢濂界殑絳栫暐錛屼絾榪欑鑷畾涔夊爢鍒嗛厤紼嬪簭涓㈠け涓庡垎閰嶅拰閲婃斁鐨勫璞$浉鍏崇殑“璇箟淇℃伅”銆?nbsp;
涓庤嚜瀹氫箟鍫嗗垎閰嶇▼搴忕浉鍙嶏紝“鍒嗛厤楂橀熺紦瀛?#8221;浣滀負(fù)姣忕被鍒嗛厤楂橀熺紦瀛樻潵瀹炵幇銆傞櫎鑳藉鎻愪緵鑷畾涔夊爢鍒嗛厤紼嬪簭鐨勬墍鏈夊ソ澶勪箣澶栵紝瀹冧滑榪樿兘澶熶繚鐣欏ぇ閲忚涔変俊鎭傛瘡涓垎閰嶉珮閫熺紦瀛樺鐞嗙▼搴忎笌涓涓洰鏍囦簩榪涘埗瀵硅薄鍏寵仈銆傚畠鑳藉浣跨敤涓濂楀弬鏁拌繘琛屽垵濮嬪寲錛岃繖浜涘弬鏁拌〃紺哄茍鍙戠駭鍒佸璞″ぇ灝忓拰淇濇寔鍦ㄧ┖闂插垪琛ㄤ腑鐨勫厓绱犵殑鏁伴噺絳夈傚垎閰嶉珮閫熺紦瀛樺鐞嗙▼搴忓璞$淮鎸佽嚜宸辯殑縐佹湁絀洪棽瀹炰綋姹狅紙涓嶈秴榪囨寚瀹氱殑闃鍊鹼級(jí)騫朵嬌鐢ㄧ鏈変繚鎶ら攣銆傚悎鍦ㄤ竴璧鳳紝鍒嗛厤楂橀熺紦瀛樺拰縐佹湁閿佸噺灝戜簡(jiǎn)涓庝富緋葷粺鍫嗙殑閫氫俊閲忥紝鍥犺屾彁渚涗簡(jiǎn)澧炲姞鐨勫茍鍙戙佹渶澶ч檺搴︾殑閲嶇敤鍜岃緝楂樼殑鍙幾緙╂с?/p>
闇瑕佷嬌鐢ㄦ竻鐞嗙▼搴忔潵瀹氭湡媯(gè)鏌ユ墍鏈夊垎閰嶉珮閫熺紦瀛樺鐞嗙▼搴忕殑媧誨姩鎯呭喌騫跺洖鏀舵湭鐢ㄧ殑璧勬簮銆傚鏋滃彂鐜版病鏈夋椿鍔紝灝嗛噴鏀懼垎閰嶅璞$殑姹狅紝浠庤屾彁楂樻ц兘銆?/p>
鍙互瀹℃牳姣忎釜鍒嗛厤/閲婃斁媧誨姩銆傜涓綰т俊鎭寘鎷璞°佸垎閰嶅拰閲婃斁璋冪敤鐨勬繪暟銆傞氳繃鏌ョ湅瀹冧滑鐨勭粺璁′俊鎭彲浠ュ緱鍑哄悇涓璞′箣闂寸殑璇箟鍏崇郴銆傚埄鐢ㄤ互涓婁粙緇嶇殑璁稿鎶鏈箣涓錛岃繖縐嶅叧緋誨彲浠ョ敤鏉ュ噺灝戝唴瀛樺垎閰嶃?/p>
鍒嗛厤楂橀熺紦瀛樹(shù)篃璧峰埌浜?jiǎn)璋冭瘯鍔╂墜鐨勪綔鐢ㄥQ屽府鍔╂?zhèn)ㄨ窡韪病鏈夊畬鍏ㄦ竻闄ょ殑瀵硅薄鏁伴噺銆傞氳繃鏌ョ湅鍔ㄦ佸爢鏍堣繑鍥炶釜榪瑰拰闄ゆ病鏈夋竻闄ょ殑瀵硅薄涔嬪鐨勭鍚嶏紝鐢氳嚦鑳藉鎵懼埌紜垏鐨勫け璐ョ殑璋冪敤鑰呫?/p>
MP 鍫?nbsp;
MP 鍫嗘槸瀵瑰澶勭悊鍣ㄥ弸濂界殑鍒嗗竷寮忓垎閰嶇殑紼嬪簭鍖咃紝鍦?nbsp;Win32 SDK錛圵indows NT 4.0 鍜屾洿鏂扮増鏈級(jí)涓彲浠ュ緱鍒般傛渶鍒濈敱 JVert 瀹炵幇錛屾澶勫爢鎶借薄寤虹珛鍦?nbsp;Win32 鍫嗙▼搴忓寘鐨勯《閮ㄣ侻P 鍫嗗垱寤哄涓?nbsp;Win32 鍫嗭紝騫惰瘯鍥懼皢鍒嗛厤璋冪敤鍒嗗竷鍒頒笉鍚屽爢錛屼互鍑忓皯鍦ㄦ墍鏈夊崟涓閿佷笂鐨勭珵浜夈?/p>
鏈▼搴忓寘鏄ソ鐨勬楠?nbsp;鈥斾竴縐嶆敼榪涚殑 MP-鍙嬪ソ鐨勮嚜瀹氫箟鍫嗗垎閰嶇▼搴忋備絾鏄紝瀹冧笉鎻愪緵璇箟淇℃伅鍜岀己涔忕粺璁″姛鑳姐傞氬父灝?nbsp;MP 鍫嗕綔涓?nbsp;SDK 搴撴潵浣跨敤銆傚鏋滀嬌鐢ㄨ繖涓?nbsp;SDK 鍒涘緩鍙噸鐢ㄧ粍浠訛紝鎮(zhèn)ㄥ皢澶уぇ鍙楃泭銆備絾鏄紝濡傛灉鍦ㄦ瘡涓?nbsp;DLL 涓緩绔嬭繖涓?nbsp;SDK 搴擄紝灝嗗鍔犲伐浣滆緗?/p>
閲嶆柊鎬濊冪畻娉曞拰鏁版嵁緇撴瀯
瑕佸湪澶氬鐞嗗櫒鏈哄櫒涓婁幾緙╋紝鍒欑畻娉曘佸疄鐜般佹暟鎹粨鏋勫拰紜歡蹇呴』鍔ㄦ佷幾緙┿傝鐪嬫渶緇忓父鍒嗛厤鍜岄噴鏀劇殑鏁版嵁緇撴瀯銆傝瘯闂紝“鎴戣兘鐢ㄤ笉鍚岀殑鏁版嵁緇撴瀯瀹屾垚姝ゅ伐浣滃悧錛?#8221;渚嬪錛屽鏋滃湪搴旂敤紼嬪簭鍒濆鍖栨椂鍔犺澆浜?jiǎn)鍙椤圭殑鍒楄〃锛寴q欎釜鍒楄〃涓嶅繀鏄嚎鎬ч摼鎺ョ殑鍒楄〃銆傚鏋滄槸鍔ㄦ佸垎閰嶇殑鏁扮粍灝遍潪甯稿ソ銆傚姩鎬佸垎閰嶇殑鏁扮粍灝嗗噺灝戝唴瀛樹(shù)腑鐨勫爢鍧楀拰紕庣墖錛屼粠鑰屽寮烘ц兘銆?/p>
鍑忓皯闇瑕佺殑灝忓璞$殑鏁伴噺鍑忓皯鍫嗗垎閰嶇▼搴忕殑璐熻澆銆備緥濡傦紝鎴戜滑鍦ㄦ湇鍔″櫒鐨勫叧閿鐞嗚礬寰勪笂浣跨敤浜斾釜涓嶅悓鐨勫璞★紝姣忎釜瀵硅薄鍗曠嫭鍒嗛厤鍜岄噴鏀俱備竴璧烽珮閫熺紦瀛樿繖浜涘璞★紝鎶婂爢璋冪敤浠庝簲涓噺灝戝埌涓涓紝鏄捐憲鍑忓皯浜?jiǎn)鍫嗙殑璐熻浇锛岀壒鍒綋姣徔U掗挓澶勭悊 1,000 涓互涓婄殑璇鋒眰鏃躲?/p>
濡傛灉澶ч噺浣跨敤“Automation”緇撴瀯錛岃鑰冭檻浠庝富綰夸唬鐮佷腑鍒犻櫎“Automation BSTR”錛屾垨鑷沖皯閬垮厤閲嶅鐨?nbsp;BSTR 鎿嶄綔銆傦紙BSTR 榪炴帴瀵艱嚧榪囧鐨勯噸鍒嗛厤鍜屽垎閰?閲婃斁鎿嶄綔銆傦級(jí)
鎽樿
瀵規(guī)墍鏈夊鉤鍙板線(xiàn)寰(xiàn)閮藉瓨鍦ㄥ爢瀹炵幇錛屽洜姝ゆ湁宸ㄥぇ鐨勫紑閿銆傛瘡涓崟鐙唬鐮侀兘鏈夌壒瀹氱殑瑕佹眰錛屼絾璁捐鑳介噰鐢ㄦ湰鏂囪璁虹殑鍩烘湰鐞嗚鏉ュ噺灝戝爢涔嬮棿鐨勭浉浜掍綔鐢ㄣ?nbsp;
璇勪環(huán)鎮(zhèn)ㄧ殑浠g爜涓爢鐨勪嬌鐢ㄣ?/p>
鏀硅繘鎮(zhèn)ㄧ殑浠g爜錛屼互浣跨敤杈冨皯鐨勫爢璋冪敤錛氬垎鏋愬叧閿礬寰勫拰鍥哄畾鏁版嵁緇撴瀯銆?/p>
鍦ㄥ疄鐜拌嚜瀹氫箟鐨勫寘瑁呯▼搴忎箣鍓嶄嬌鐢ㄩ噺鍖栧爢璋冪敤鎴愭湰鐨勬柟娉曘?/p>
濡傛灉瀵規(guī)ц兘涓嶆弧鎰忥紝璇瘋姹?nbsp;OS 緇勬敼榪涘爢銆傛洿澶氳繖綾昏姹傛剰鍛崇潃瀵規(guī)敼榪涘爢鐨勬洿澶氬叧娉ㄣ?/p>
瑕佹眰 C 榪愯鏃剁粍閽堝 OS 鎵鎻愪緵鐨勫爢鍒朵綔灝忓閥鐨勫垎閰嶅寘瑁呯▼搴忋傞殢鐫 OS 鍫嗙殑鏀硅繘錛孋 榪愯鏃跺爢璋冪敤鐨勬垚鏈皢鍑忓皬銆?/p>
鎿嶄綔緋葷粺錛圵indows NT 瀹舵棌錛夋鍦ㄤ笉鏂敼榪涘爢銆傝闅忔椂鍏蟲(chóng)敞鍜屽埄鐢ㄨ繖浜涙敼榪涖?br>Murali Krishnan 鏄?nbsp;Internet Information Server (IIS) 緇勭殑棣栧腑杞歡璁捐宸ョ▼甯堛備粠 1.0 鐗堟湰寮濮嬩粬灝辮璁?nbsp;IIS錛屽茍鎴愬姛鍙戣浜?nbsp;1.0 鐗堟湰鍒?nbsp;4.0 鐗堟湰銆侻urali 緇勭粐騫墮瀵?nbsp;IIS 鎬ц兘緇勪笁騫?nbsp;(1995-1998), 浠庝竴寮濮嬪氨褰卞搷 IIS 鎬ц兘銆備粬鎷ユ湁濞佹柉搴鋒槦宸?nbsp;Madison 澶у鐨?nbsp;M.S.鍜屽嵃搴?nbsp;Anna 澶у鐨?nbsp;B.S.銆傚伐浣滀箣澶栵紝浠栧枩嬈㈤槄璇匯佹墦鎺掔悆鍜屽搴児楗?br>
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=172835
鎴戝湪瀛︿範(fàn)瀵硅薄鐨勭敓瀛樻柟寮忕殑鏃跺欒鍒頒竴縐嶆槸鍦ㄥ爢鏍?stack)涔嬩腑錛屽涓?nbsp;
CObject object;
榪樻湁涓縐嶆槸鍦ㄥ爢(heap)涓?nbsp; 濡備笅
CObject* pobject=new CObject();
璇烽棶
錛?錛夎繖涓ょ鏂瑰紡鏈変粈涔堝尯鍒紵
錛?錛夊爢鏍堜笌鍫嗘湁浠涔堝尯鍒紵錛?nbsp;
---------------------------------------------------------------
1) about stack, system will allocate memory to the instance of object automatically, and to the
heap, you must allocate memory to the instance of object with new or malloc manually.
2) when function ends, system will automatically free the memory area of stack, but to the
heap, you must free the memory area manually with free or delete, else it will result in memory
leak.
3)鏍堝唴瀛樺垎閰嶈繍綆楀唴緗簬澶勭悊鍣ㄧ殑鎸囦護(hù)闆嗕腑錛屾晥鐜囧緢楂橈紝浣嗘槸鍒嗛厤鐨勫唴瀛樺閲忔湁闄愩?nbsp;
4錛夊爢涓婂垎閰嶇殑鍐呭瓨鍙互鏈夋垜浠嚜宸卞喅瀹氾紝浣跨敤闈炲父鐏墊椿銆?nbsp;
---------------------------------------------------------------
鏈榪戝湪瀛︽眹緙栵紝鐪嬪埌榪欑瘒鏂囩珷錛屾枃绔犵殑鍘熷嚭澶勫凡緇忔煡涓嶅嚭鏉ヤ簡(jiǎn)錛屼絾瑙夊緱涓嶉敊錛屾墍浠ヨ漿鍑烘潵錛屽綋浣滃浠藉涔?fàn)銆?/p>
4涓暟鎹瘎瀛樺櫒(EAX銆丒BX銆丒CX鍜孍DX)
2涓彉鍧鍜屾寚閽堝瘎瀛樺櫒(ESI鍜孍DI) 2涓寚閽堝瘎瀛樺櫒(ESP鍜孍BP)
6涓瀵勫瓨鍣?ES銆丆S銆丼S銆丏S銆丗S鍜孏S)
1涓寚浠ゆ寚閽堝瘎瀛樺櫒(EIP) 1涓爣蹇楀瘎瀛樺櫒(EFlags)
1銆佹暟鎹瘎瀛樺櫒
鏁版嵁瀵勫瓨鍣ㄤ富瑕佺敤鏉ヤ繚瀛樻搷浣滄暟鍜岃繍綆楃粨鏋滅瓑淇℃伅錛屼粠鑰岃妭鐪佽鍙栨搷浣滄暟鎵闇鍗犵敤鎬葷嚎鍜岃闂瓨鍌ㄥ櫒鐨勬椂闂淬?2浣岰PU鏈?涓?2浣嶇殑閫氱敤瀵勫瓨鍣‥AX銆丒BX銆丒CX鍜孍DX銆傚浣?6浣嶆暟鎹殑瀛樺彇錛屼笉浼?xì)濯?jiǎng)鍝嶉珮16浣嶇殑鏁版嵁銆傝繖浜涗綆16浣嶅瘎瀛樺櫒鍒嗗埆鍛藉悕涓猴細(xì)AX銆丅X銆丆X鍜孌X錛屽畠鍜屽厛鍓嶇殑CPU涓殑瀵勫瓨鍣ㄧ浉涓鑷淬?/p>
4涓?6浣嶅瘎瀛樺櫒鍙堝彲鍒嗗壊鎴?涓嫭绔嬬殑8浣嶅瘎瀛樺櫒(AX錛欰H-AL銆丅X錛欱H-BL銆丆X錛欳H-CL銆丏X錛欴H-DL)錛屾瘡涓瘎瀛樺櫒閮芥湁鑷繁鐨勫悕縐幫紝鍙嫭绔嬪瓨鍙栥傜▼搴忓憳鍙埄鐢ㄦ暟鎹瘎瀛樺櫒鐨勮繖縐?#8221;鍙垎鍙悎”鐨勭壒鎬э紝鐏墊椿鍦板鐞嗗瓧/瀛楄妭鐨勪俊鎭?br>瀵勫瓨鍣ˋX鍜孉L閫氬父縐頒負(fù)绱姞鍣?Accumulator)錛岀敤绱姞鍣ㄨ繘琛岀殑鎿嶄綔鍙兘闇瑕佹洿灝戞椂闂淬傜瘡鍔犲櫒鍙敤浜庝箻銆?闄ゃ佽緭鍏?杈撳嚭絳夋搷浣滐紝瀹冧滑鐨勪嬌鐢ㄩ鐜囧緢楂橈紱 瀵勫瓨鍣˙X縐頒負(fù)鍩哄湴鍧瀵勫瓨鍣?Base Register)銆傚畠鍙綔涓哄瓨鍌ㄥ櫒鎸囬拡鏉ヤ嬌鐢紱 瀵勫瓨鍣–X縐頒負(fù)璁℃暟瀵勫瓨鍣?Count Register)銆傚湪寰幆鍜屽瓧絎︿覆鎿嶄綔鏃訛紝瑕佺敤瀹冩潵鎺у埗寰幆嬈℃暟錛涘湪浣嶆搷浣?涓紝褰撶Щ澶氫綅鏃訛紝瑕佺敤CL鏉ユ寚鏄庣Щ浣嶇殑浣嶆暟錛?br>瀵勫瓨鍣―X縐頒負(fù)鏁版嵁瀵勫瓨鍣?Data Register)銆傚湪榪涜涔樸侀櫎榪愮畻鏃訛紝瀹冨彲浣滀負(fù)榛樿鐨勬搷浣滄暟鍙備笌榪愮畻錛屼篃鍙敤浜庡瓨鏀綢/O鐨勭鍙e湴鍧銆傚湪16浣岰PU涓紝AX銆丅X銆丆X鍜孌X涓嶈兘浣滀負(fù)鍩哄潃鍜屽彉鍧瀵勫瓨鍣ㄦ潵瀛樻斁瀛樺偍鍗曞厓鐨勫湴鍧錛屼絾鍦?2浣岰PU涓紝鍏?2浣嶅瘎瀛樺櫒EAX銆丒BX銆丒CX鍜孍DX涓嶄粎鍙紶閫佹暟鎹佹殏瀛樻暟鎹繚瀛樼畻鏈昏緫榪愮畻緇撴灉錛岃屼笖涔熷彲浣滀負(fù)鎸囬拡瀵勫瓨鍣紝鎵浠ワ紝榪欎簺32浣嶅瘎瀛樺櫒鏇村叿鏈夐氱敤鎬с?br>2銆佸彉鍧瀵勫瓨鍣?br>32浣岰PU鏈?涓?2浣嶉氱敤瀵勫瓨鍣‥SI鍜孍DI銆傚叾浣?6浣嶅搴斿厛鍓岰PU涓殑SI鍜孌I錛屽浣?6浣嶆暟鎹殑瀛樺彇錛屼笉褰卞搷楂?6浣嶇殑鏁版嵁銆?br>瀵勫瓨鍣‥SI銆丒DI銆丼I鍜孌I縐頒負(fù)鍙樺潃瀵勫瓨鍣?Index Register)錛屽畠浠富瑕佺敤浜庡瓨鏀懼瓨鍌ㄥ崟鍏冨湪孌靛唴鐨勫亸縐婚噺錛岀敤瀹冧滑鍙疄鐜板縐嶅瓨鍌ㄥ櫒鎿嶄綔鏁扮殑瀵誨潃鏂瑰紡錛屼負(fù)浠ヤ笉鍚岀殑鍦板潃褰㈠紡璁塊棶瀛樺偍鍗曞厓鎻愪緵鏂逛究銆傚彉鍧瀵勫瓨鍣ㄤ笉鍙垎鍓叉垚8浣嶅瘎瀛樺櫒銆備綔涓洪氱敤瀵勫瓨鍣紝涔熷彲瀛樺偍綆楁湳閫昏緫榪愮畻鐨勬搷浣滄暟鍜岃繍綆楃粨鏋溿傚畠浠彲浣滀竴鑸殑瀛樺偍鍣ㄦ寚閽堜嬌鐢ㄣ傚湪瀛楃涓叉搷浣滄寚浠ょ殑鎵ц榪囩▼涓紝瀵瑰畠浠湁鐗瑰畾鐨勮姹傦紝鑰屼笖榪樺叿鏈夌壒孌婄殑鍔熻兘銆?br>3銆佹寚閽堝瘎瀛樺櫒
32浣岰PU鏈?涓?2浣嶉氱敤瀵勫瓨鍣‥BP鍜孍SP銆傚叾浣?6浣嶅搴斿厛鍓岰PU涓殑SBP鍜孲P錛屽浣?6浣嶆暟鎹殑瀛樺彇錛屼笉褰卞搷楂?6浣嶇殑鏁版嵁銆?br>瀵勫瓨鍣‥BP銆丒SP銆丅P鍜孲P縐頒負(fù)鎸囬拡瀵勫瓨鍣?Pointer Register)錛屼富瑕佺敤浜庡瓨鏀懼爢鏍堝唴瀛樺偍鍗曞厓鐨勫亸縐婚噺錛岀敤瀹冧滑鍙疄鐜板縐嶅瓨鍌ㄥ櫒鎿嶄綔鏁扮殑瀵誨潃鏂瑰紡錛屼負(fù)浠ヤ笉鍚岀殑鍦板潃褰㈠紡璁塊棶瀛樺偍鍗曞厓鎻愪緵鏂逛究銆傛寚閽堝瘎瀛樺櫒涓嶅彲鍒嗗壊鎴?浣嶅瘎瀛樺櫒銆備綔涓洪氱敤瀵勫瓨鍣紝涔熷彲瀛樺偍綆楁湳閫昏緫榪愮畻鐨勬搷浣滄暟鍜岃繍綆楃粨鏋溿?br>瀹冧滑涓昏鐢ㄤ簬璁塊棶鍫嗘爤鍐呯殑瀛樺偍鍗曞厓錛屽茍涓旇瀹氾細(xì)
BP涓哄熀鎸囬拡(Base Pointer)瀵勫瓨鍣紝鐢ㄥ畠鍙洿鎺ュ瓨鍙栧爢鏍堜腑鐨勬暟鎹紱
SP涓哄爢鏍堟寚閽?Stack Pointer)瀵勫瓨鍣紝鐢ㄥ畠鍙彲璁塊棶鏍堥《銆?br>4銆佹瀵勫瓨鍣?br>孌靛瘎瀛樺櫒鏄牴鎹唴瀛樺垎孌電殑綆$悊妯″紡鑰岃緗殑銆傚唴瀛樺崟鍏冪殑鐗╃悊鍦板潃鐢辨瀵勫瓨鍣ㄧ殑鍊煎拰涓涓亸縐婚噺緇勫悎鑰屾垚
鐨勶紝榪欐牱鍙敤涓や釜杈冨皯浣嶆暟鐨勫肩粍鍚堟垚涓涓彲璁塊棶杈冨ぇ鐗╃悊絀洪棿鐨勫唴瀛樺湴鍧銆?br>CPU鍐呴儴鐨勬瀵勫瓨鍣細(xì)
CS鈥斺斾唬鐮佹瀵勫瓨鍣?Code Segment Register)錛屽叾鍊間負(fù)浠g爜孌電殑孌靛鹼紱
DS鈥斺旀暟鎹瀵勫瓨鍣?Data Segment Register)錛屽叾鍊間負(fù)鏁版嵁孌電殑孌靛鹼紱
ES鈥斺旈檮鍔犳瀵勫瓨鍣?Extra Segment Register)錛屽叾鍊間負(fù)闄勫姞鏁版嵁孌電殑孌靛鹼紱
SS鈥斺斿爢鏍堟瀵勫瓨鍣?Stack Segment Register)錛屽叾鍊間負(fù)鍫嗘爤孌電殑孌靛鹼紱
FS鈥斺旈檮鍔犳瀵勫瓨鍣?Extra Segment Register)錛屽叾鍊間負(fù)闄勫姞鏁版嵁孌電殑孌靛鹼紱
GS鈥斺旈檮鍔犳瀵勫瓨鍣?Extra Segment Register)錛屽叾鍊間負(fù)闄勫姞鏁版嵁孌電殑孌靛箋?/p>
鍦?6浣岰PU緋葷粺涓紝瀹冨彧鏈?涓瀵勫瓨鍣紝鎵浠ワ紝紼嬪簭鍦ㄤ換浣曟椂鍒昏嚦澶氭湁4涓鍦ㄤ嬌鐢ㄧ殑孌靛彲鐩存帴璁塊棶錛涘湪32浣嶅井鏈虹郴緇熶腑錛屽畠鏈?涓瀵勫瓨鍣紝鎵浠ワ紝鍦ㄦ鐜涓嬪紑鍙戠殑紼嬪簭鏈澶氬彲鍚屾椂璁塊棶6涓銆?2浣岰PU鏈変袱涓笉鍚岀殑宸ヤ綔鏂瑰紡錛氬疄鏂瑰紡鍜屼繚鎶ゆ柟寮忋傚湪姣忕鏂瑰紡涓嬶紝孌靛瘎瀛樺櫒鐨勪綔鐢ㄦ槸涓嶅悓鐨勩傛湁鍏寵瀹氱畝鍗曟弿榪板涓嬶細(xì)
瀹炴柟寮忥細(xì) 鍓?涓瀵勫瓨鍣–S銆丏S銆丒S鍜孲S涓庡厛鍓岰PU涓殑鎵瀵瑰簲鐨勬瀵勫瓨鍣ㄧ殑鍚箟瀹屽叏涓鑷達(dá)紝鍐呭瓨鍗曞厓鐨勯昏緫鍦板潃浠嶄負(fù)”孌靛鹼細(xì)鍋忕Щ閲?#8221;鐨勫艦寮忋備負(fù)璁塊棶鏌愬唴瀛樻鍐呯殑鏁版嵁錛屽繀欏諱嬌鐢ㄨ孌靛瘎瀛樺櫒鍜屽瓨鍌ㄥ崟鍏冪殑鍋忕Щ閲忋?br>淇濇姢鏂瑰紡錛?鍦ㄦ鏂瑰紡涓嬶紝鎯呭喌瑕佸鏉傚緱澶氾紝瑁呭叆孌靛瘎瀛樺櫒鐨勪笉鍐嶆槸孌靛鹼紝鑰屾槸縐頒負(fù)”閫夋嫨瀛?#8221;(Selector)鐨勬煇涓箋?br>5銆佹寚浠ゆ寚閽堝瘎瀛樺櫒
32浣岰PU鎶婃寚浠ゆ寚閽堟墿灞曞埌32浣嶏紝騫惰浣淓IP錛孍IP鐨勪綆16浣嶄笌鍏堝墠CPU涓殑IP浣滅敤鐩稿悓銆?br>鎸囦護(hù)鎸囬拡EIP銆両P(Instruction Pointer)鏄瓨鏀句笅嬈″皢瑕佹墽琛岀殑鎸囦護(hù)鍦ㄤ唬鐮佹鐨勫亸縐婚噺銆傚湪鍏鋒湁棰勫彇鎸囦護(hù)鍔熻兘鐨勭郴緇熶腑錛屼笅嬈¤鎵ц鐨勬寚浠ら氬父宸茶棰勫彇鍒版寚浠ら槦鍒椾腑錛岄櫎闈炲彂鐢熻漿縐繪儏鍐點(diǎn)傛墍浠ワ紝鍦ㄧ悊瑙e畠浠殑鍔熻兘鏃訛紝涓嶈冭檻瀛樺湪鎸囦護(hù)闃熷垪鐨勬儏鍐點(diǎn)?br>鍦ㄥ疄鏂瑰紡涓嬶紝鐢變簬姣忎釜孌電殑鏈澶ц寖鍥翠負(fù)64K錛屾墍浠ワ紝EIP涓殑楂?6浣嶈偗瀹氶兘涓?錛屾鏃訛紝鐩稿綋浜庡彧鐢ㄥ叾浣?6浣嶇殑IP鏉ュ弽鏄犵▼搴忎腑鎸囦護(hù)鐨勬墽琛屾搴忋?br>6銆佹爣蹇楀瘎瀛樺櫒
涓銆佽繍綆楃粨鏋滄爣蹇椾綅
1銆佽繘浣嶆爣蹇桟F(Carry Flag)
榪涗綅鏍囧織CF涓昏鐢ㄦ潵鍙嶆槧榪愮畻鏄惁浜х敓榪涗綅鎴栧熶綅銆傚鏋滆繍綆楃粨鏋滅殑鏈楂樹(shù)綅浜х敓浜?jiǎn)涓涓繘浣嶆垨鍊熶綅錛岄偅涔堬紝鍏跺間負(fù)1錛屽惁鍒欏叾鍊間負(fù)0銆備嬌鐢ㄨ鏍囧織浣嶇殑鎯呭喌鏈夛細(xì)澶氬瓧(瀛楄妭)鏁扮殑鍔犲噺榪愮畻錛屾棤絎﹀彿鏁扮殑澶у皬姣旇緝榪愮畻錛岀Щ浣嶆搷浣滐紝瀛?瀛楄妭)涔嬮棿縐諱綅錛屼笓闂ㄦ敼鍙楥F鍊肩殑鎸囦護(hù)絳夈?br>2銆佸鍋舵爣蹇桺F(Parity Flag)
濂囧伓鏍囧織PF鐢ㄤ簬鍙嶆槧榪愮畻緇撴灉涓?#8221;1″鐨勪釜鏁扮殑濂囧伓鎬с傚鏋?#8221;1″鐨勪釜鏁頒負(fù)鍋舵暟錛屽垯PF鐨勫間負(fù)1錛屽惁鍒欏叾鍊間負(fù)0銆?br>鍒╃敤PF鍙繘琛屽鍋舵牎楠屾鏌ワ紝鎴栦駭鐢熷鍋舵牎楠屼綅銆傚湪鏁版嵁浼犻佽繃紼嬩腑錛屼負(fù)浜?jiǎn)鎻愪緵浼犻佺殑鍙潬鎬э紝濡傛灉閲囩敤濂囧伓鏍¢獙鐨勬柟娉曪紝灝卞彲浣跨敤璇ユ爣蹇椾綅銆?br>3銆佽緟鍔╄繘浣嶆爣蹇桝F(Auxiliary Carry Flag)
鍦ㄥ彂鐢熶笅鍒楁儏鍐墊椂錛岃緟鍔╄繘浣嶆爣蹇桝F鐨勫艱緗負(fù)1錛屽惁鍒欏叾鍊間負(fù)0錛?br>(1)銆佸湪瀛楁搷浣滄椂錛屽彂鐢熶綆瀛楄妭鍚戦珮瀛楄妭榪涗綅鎴栧熶綅鏃訛紱
(2)銆佸湪瀛楄妭鎿嶄綔鏃訛紝鍙戠敓浣?浣嶅悜楂?浣嶈繘浣嶆垨鍊熶綅鏃躲?br>瀵逛互涓?涓繍綆楃粨鏋滄爣蹇椾綅錛屽湪涓鑸紪紼嬫儏鍐典笅錛屾爣蹇椾綅CF銆乑F銆丼F鍜孫F鐨勪嬌鐢ㄩ鐜囪緝楂橈紝鑰屾爣蹇椾綅PF鍜孉F鐨勪嬌鐢ㄩ鐜囪緝浣庛?br>4銆侀浂鏍囧織ZF(Zero Flag)
闆舵爣蹇梈F鐢ㄦ潵鍙嶆槧榪愮畻緇撴灉鏄惁涓?銆傚鏋滆繍綆楃粨鏋滀負(fù)0錛屽垯鍏跺間負(fù)1錛屽惁鍒欏叾鍊間負(fù)0銆傚湪鍒ゆ柇榪愮畻緇撴灉鏄惁涓?鏃訛紝鍙嬌鐢ㄦ鏍囧織浣嶃?br>5銆佺鍙鋒爣蹇桽F(Sign Flag)
絎﹀彿鏍囧織SF鐢ㄦ潵鍙嶆槧榪愮畻緇撴灉鐨勭鍙蜂綅錛屽畠涓庤繍綆楃粨鏋滅殑鏈楂樹(shù)綅鐩稿悓銆傚湪寰満緋葷粺涓紝鏈夌鍙鋒暟閲囩敤琛ョ爜琛ㄧず娉曪紝鎵浠ワ紝SF涔熷氨鍙嶆槧榪愮畻緇撴灉鐨勬璐熷彿銆傝繍綆楃粨鏋滀負(fù)姝f暟鏃訛紝SF鐨勫間負(fù)0錛屽惁鍒欏叾鍊間負(fù)1銆?br>6銆佹孩鍑烘爣蹇桹F(Overflow Flag)
婧㈠嚭鏍囧織OF鐢ㄤ簬鍙嶆槧鏈夌鍙鋒暟鍔犲噺榪愮畻鎵寰楃粨鏋滄槸鍚︽孩鍑恒傚鏋滆繍綆楃粨鏋滆秴榪囧綋鍓嶈繍綆椾綅鏁版墍鑳借〃紺虹殑鑼冨洿錛屽垯縐頒負(fù)婧㈠嚭錛孫F鐨勫艱緗負(fù)1錛屽惁鍒欙紝OF鐨勫艱娓呬負(fù)0銆?#8221;婧㈠嚭”鍜?#8221;榪涗綅”鏄袱涓笉鍚屽惈涔夌殑姒傚康錛屼笉瑕佹販娣嗐傚鏋滀笉澶竻妤氱殑璇濓紝璇鋒煡闃呫婅綆楁満緇勬垚鍘熺悊銆嬭紼嬩腑鐨勬湁鍏崇珷鑺傘?br>浜屻佺姸鎬佹帶鍒舵爣蹇椾綅
鐘舵佹帶鍒舵爣蹇椾綅鏄敤鏉ユ帶鍒禖PU鎿嶄綔鐨勶紝瀹冧滑瑕侀氳繃涓撻棬鐨勬寚浠ゆ墠鑳戒嬌涔嬪彂鐢熸敼鍙樸?br>1銆佽拷韙爣蹇桾F(Trap Flag)
褰撹拷韙爣蹇桾F琚疆涓?鏃訛紝CPU榪涘叆鍗曟鎵ц鏂瑰紡錛屽嵆姣忔墽琛屼竴鏉℃寚浠わ紝浜х敓涓涓崟姝ヤ腑鏂姹傘傝繖縐嶆柟寮忎富瑕佺敤浜庣▼搴忕殑璋冭瘯銆傛寚浠ょ郴緇熶腑娌℃湁涓撻棬鐨勬寚浠ゆ潵鏀瑰彉鏍囧織浣峊F鐨勫鹼紝浣嗙▼搴忓憳鍙敤鍏跺畠鍔炴硶鏉ユ敼鍙樺叾鍊箋?br>2銆佷腑鏂厑璁告爣蹇桰F(Interrupt-enable Flag)
涓柇鍏佽鏍囧織IF鏄敤鏉ュ喅瀹欳PU鏄惁鍝嶅簲CPU澶栭儴鐨勫彲灞忚斀涓柇鍙戝嚭鐨勪腑鏂姹傘備絾涓嶇璇ユ爣蹇椾負(fù)浣曞鹼紝CPU閮藉繀欏誨搷搴擟PU澶栭儴鐨勪笉鍙睆钄戒腑鏂墍鍙戝嚭鐨勪腑鏂姹傦紝浠ュ強(qiáng)CPU鍐呴儴浜х敓鐨勪腑鏂姹傘傚叿浣撹瀹氬涓嬶細(xì)
(1)銆佸綋IF=1鏃訛紝CPU鍙互鍝嶅簲CPU澶栭儴鐨勫彲灞忚斀涓柇鍙戝嚭鐨勪腑鏂姹傦紱
(2)銆佸綋IF=0鏃訛紝CPU涓嶅搷搴擟PU澶栭儴鐨勫彲灞忚斀涓柇鍙戝嚭鐨勪腑鏂姹傘?br>CPU鐨勬寚浠ょ郴緇熶腑涔熸湁涓撻棬鐨勬寚浠ゆ潵鏀瑰彉鏍囧織浣岻F鐨勫箋?br>3銆佹柟鍚戞爣蹇桪F(Direction Flag)
鏂瑰悜鏍囧織DF鐢ㄦ潵鍐沖畾鍦ㄤ覆鎿嶄綔鎸囦護(hù)鎵ц鏃舵湁鍏蟲(chóng)寚閽堝瘎瀛樺櫒鍙戠敓璋冩暣鐨勬柟鍚戙傚叿浣撹瀹氬湪絎?.2.11鑺傗斺斿瓧絎︿覆鎿嶄綔鎸囦護(hù)鈥斺斾腑緇欏嚭銆傚湪寰満鐨勬寚浠ょ郴緇熶腑錛岃繕鎻愪緵浜?jiǎn)涓撻棬鐨勬寚渥o(hù)鏉ユ敼鍙樻爣蹇椾綅DF鐨勫箋?br>涓夈?2浣嶆爣蹇楀瘎瀛樺櫒澧炲姞鐨勬爣蹇椾綅
1銆両/O鐗規(guī)潈鏍囧織IOPL(I/O Privilege Level)
I/O鐗規(guī)潈鏍囧織鐢ㄤ袱浣嶄簩榪涘埗浣嶆潵琛ㄧず錛屼篃縐頒負(fù)I/O鐗規(guī)潈綰у瓧孌點(diǎn)傝瀛楁鎸囧畾浜?jiǎn)瑕佹眰鎵цI/O鎸囦護(hù)鐨勭壒鏉冪駭銆傚鏋滃綋鍓嶇殑鐗規(guī)潈綰у埆鍦ㄦ暟鍊間笂灝忎簬絳変簬IOPL鐨勫鹼紝閭d箞錛岃I/O鎸囦護(hù)鍙墽琛岋紝鍚﹀垯灝嗗彂鐢熶竴涓繚鎶ゅ紓甯搞?br>2銆佸祵濂椾換鍔℃爣蹇桸T(Nested Task)
宓屽浠誨姟鏍囧織NT鐢ㄦ潵鎺у埗涓柇榪斿洖鎸囦護(hù)IRET鐨勬墽琛屻傚叿浣撹瀹氬涓嬶細(xì)
(1)銆佸綋NT=0錛岀敤鍫嗘爤涓繚瀛樼殑鍊兼仮澶岴FLAGS銆丆S鍜孍IP錛屾墽琛屽父瑙勭殑涓柇榪斿洖鎿嶄綔錛?br>(2)銆佸綋NT=1錛岄氳繃浠誨姟杞崲瀹炵幇涓柇榪斿洖銆?br>3銆侀噸鍚姩鏍囧織RF(Restart Flag)
閲嶅惎鍔ㄦ爣蹇桼F鐢ㄦ潵鎺у埗鏄惁鎺ュ彈璋冭瘯鏁呴殰銆傝瀹氾細(xì)RF=0鏃訛紝琛ㄧず”鎺ュ彈”璋冭瘯鏁呴殰錛屽惁鍒欐嫆緇濅箣銆傚湪鎴愬姛鎵ц瀹屼竴鏉℃寚浠ゅ悗錛屽鐞嗘満鎶奟F緗負(fù)0錛屽綋鎺ュ彈鍒頒竴涓潪璋冭瘯鏁呴殰鏃訛紝澶勭悊鏈哄氨鎶婂畠緗負(fù)1銆?br>4銆佽櫄鎷?086鏂瑰紡鏍囧織VM(Virtual 8086 Mode)
濡傛灉璇ユ爣蹇楃殑鍊間負(fù)1錛屽垯琛ㄧず澶勭悊鏈哄浜庤櫄鎷熺殑8086鏂瑰紡涓嬬殑宸ヤ綔鐘舵侊紝鍚﹀垯錛屽鐞嗘満澶勪簬涓鑸繚鎶ゆ柟寮忎笅鐨勫伐浣滅姸鎬?/p>
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/liguodong86/archive/2009/03/02/3949721.aspx