¼¸ÖÖC/C++µÄº¯Êýѹջ·½Ê½
Ò»£¬²»Í¬¹Ø¼ü×Ö£¬ÏµÍ³Ñ¹Õ»·½Ê½
1£¬Èç¹ûº¯ÊýfuncÊÇ__cdecl(VCϵÄĬÈϵ÷Ó÷½Ê½)£¬µ÷ÓÃʱÇé¿öÈçÏÂ
int main()
{
//²ÎÊý´ÓÓÒµ½×óѹջ
push 4
push 3
push 2
push 1
call func
add esp 0x10 //µ÷ÓÃÕ߻ָ´¶ÑÕ»Ö¸Õëesp£¬4¸ö²ÎÊýµÄ´óСÊÇ0x10(4x4)
}
Cµ÷ÓÃÔ¼¶¨£¨¼´ÓÃ__cdecl¹Ø¼ü×Ö˵Ã÷£©°´´ÓÓÒÖÁ×óµÄ˳Ðòѹ²ÎÊýÈëÕ»£¬Óɵ÷ÓÃÕ߰ѲÎÊýµ¯³öÕ»¡£¶ÔÓÚ´«ËͲÎÊýµÄÄÚ´æÕ»ÊÇÓɵ÷ÓÃÕßÀ´Î¬»¤µÄ£¨ÕýÒòΪÈç´Ë£¬ÊµÏֿɱä²ÎÊýµÄº¯ÊýÖ»ÄÜʹÓøõ÷ÓÃÔ¼¶¨£©¡£ÁíÍ⣬ÔÚº¯ÊýÃûÐÞÊÎÔ¼¶¨·½ÃæÒ²ÓÐËù²»Í¬¡£
_cdeclÊÇCºÍC£«£«³ÌÐòµÄȱʡµ÷Ó÷½Ê½¡£Ã¿Ò»¸öµ÷ÓÃËüµÄº¯Êý¶¼°üº¬Çå¿Õ¶ÑÕ»µÄ´úÂ룬ËùÒÔ²úÉúµÄ¿ÉÖ´ÐÐÎļþ´óС»á±Èµ÷ÓÃ_stdcallº¯ÊýµÄ´ó¡£º¯Êý²ÉÓôÓÓÒµ½×óµÄѹջ·½Ê½¡£VC½«º¯Êý±àÒëºó»áÔÚº¯ÊýÃûÇ°Ãæ¼ÓÉÏÏ»®Ïßǰ׺¡£ÊÇMFCȱʡµ÷ÓÃÔ¼¶¨
2.Èç¹ûº¯ÊýfuncÊÇ__stdcall£¬µ÷ÓÃʱÇé¿öÈçÏÂ
int main()
{
//²ÎÊý´ÓÓÒµ½×óѹջ
push 4
push 3
push 2
push 1
call func
//»Ö¸´¶ÑÕ»Ö¸ÕëÓɱ»µ÷ÓÃÕßfunc¸ºÔ𣬷½·¨ÊÇ"ret 0x10"
}
_stdcallÊÇPascal³ÌÐòµÄȱʡµ÷Ó÷½Ê½£¬Í¨³£ÓÃÓÚWin32 ApiÖУ¬º¯Êý²ÉÓôÓÓÒµ½×óµÄѹջ·½Ê½£¬×Ô¼ºÔÚÍ˳öʱÇå¿Õ¶ÑÕ»¡£VC½«º¯Êý±àÒëºó»áÔÚº¯ÊýÃûǰ
Ãæ¼ÓÉÏÏ»®Ïßǰ׺£¬ÔÚº¯ÊýÃûºó¼ÓÉÏ"@"ºÍ²ÎÊýµÄ×Ö½ÚÊý¡£
3.Èç¹ûº¯ÊýfuncÊÇ__pascal£¬µ÷ÓÃÇé¿öÈçÏÂ
int main()
{
//²ÎÊý´Ó×óµ½ÓÒѹջ
push 1
push 2
push 3
push 4
call func
//»Ö¸´¶ÑÕ»Ö¸ÕëÓɱ»µ÷ÓÃÕßfunc¸ºÔ𣬷½·¨ÊÇ"ret 0x10"
}
3.Èç¹ûº¯ÊýfuncÊÇ__fastcall£¬µ÷ÓÃÇé¿öÈçÏÂ
int main()
{
//²ÎÊýÏÈÓÃecx, edx, eax´«µÝ£¬È»ºóÔÙѹջ
//²»½øÕ»
//(²»ÖªÎªÊ²Ã´£¬°ïÖúÖÐдµÄÊÇ´Ó×óµ½ÓÒ´«µÝµÄ£¬
//ÊDz»ÊÇ´íÁË£¬»¹ÊÇBCB6ºÍBCB5µÄ²»Ò»Ñù)
push 4
mov ecx 3
mov edx 2
mov eax 1
call func
//»Ö¸´¶ÑÕ»Ö¸ÕëÓɱ»µ÷ÓÃÕßfunc¸ºÔ𣬷½·¨ÊÇ"ret 0x04",
//ÒòΪֻ½øÕ»Ò»¸ö²ÎÊý£¬ÆäÓàÓüĴæÆ÷´«µÝ£¬ËùÒÔÓÃret 0x04»Ö¸´
}
__fastcallµ÷ÓÃÔ¼¶¨ÊÇ“ÈË”ÈçÆäÃû£¬ËüµÄÖ÷ÒªÌØµã¾ÍÊǿ죬ÒòΪËüÊÇͨ¹ý¼Ä´æÆ÷À´´«ËͲÎÊýµÄ£¨Êµ¼ÊÉÏ£¬ËüÓÃECXºÍEDX´«ËÍǰÁ½¸öË«×Ö£¨DWORD£©»ò¸üСµÄ²ÎÊý£¬Ê£ÏµIJÎÊýÈÔ¾É×ÔÓÒÏò×óѹջ´«ËÍ£¬±»µ÷Óõĺ¯ÊýÔÚ·µ»ØÇ°ÇåÀí´«ËͲÎÊýµÄÄÚ´æÕ»£©£¬ÔÚº¯ÊýÃûÐÞÊÎÔ¼¶¨·½Ã棬ËüºÍǰÁ½Õß¾ù²»Í¬¡£
__fastcall·½Ê½µÄº¯Êý²ÉÓüĴæÆ÷´«µÝ²ÎÊý£¬VC½«º¯Êý±àÒëºó»áÔÚº¯ÊýÃûÇ°Ãæ¼ÓÉÏ"@"ǰ׺£¬ÔÚº¯ÊýÃûºó¼ÓÉÏ"@"ºÍ²ÎÊýµÄ×Ö½ÚÊ
Ïà¹ØÎĵµ£º
ΪÁËʵÏÖÁ½¸öÊý×Ö½øÐн»»»£¬ÎÒÃÇͨ³£¿ÉÒÔÀûÓÃλÔËËãÀ´ÊµÏÖ
C++³ÌÐò swap(int a ,int b){a^=b^=a^=b;}
JAVA³ÌÐò swap(int a, int b){ a^=b;b^=a;a^=b; }»òÕß{ b^=(a^=b) ; a^=b;}
Èç¹ûJAVAÓÃC++µÄʵÏÖ·½Ê½Ôò»áµÃµ½ bµÃµ½ÁËaµÄÖµ£¬µ«ÊÇaÏÖÔÚµÄֵȴ² ......
µ±½ñÓÐÐí¶àÃâ·ÑµÄ RDBMS£¨Relational Database Management
System£¬¹ØÏµÊý¾Ý¿â¹ÜÀíϵͳ£©£¬ÆäÖÐһЩÊÇ¿ª·ÅÔ´ÂëÈí¼þ£¬ÁíһЩÊÇÉÌÒµ³§ÉÌÌṩµÄÃâ·Ñ²úÆ·¡£Èç¹ûÄúÕýÔÚʹÓà C/C++¡¢Java™¡¢.NET
»ò PHP
¿ª·¢Ó¦ÓóÌÐò£¬ÏëѰÕÒÒ»ÖÖ¿É¿¿µÄÊý¾Ý·þÎñÆ÷£¬Ï£ÍûËüÖ§³ÖÏȽøµÄ¼¼Êõ¡¢¾ßÓв»¶ÏÀ©´óµÄ¿ª·¢ÈËÔ±ÉçÇø²¢ÒѾ²¿ÊðÔÚÐí¶à¹Ø¼ ......
½«Àà³ÉÔ±º¯ÊýÓÃ×öC»Øµ÷º¯Êý
Ìá³öÎÊÌ⣺
»Øµ÷º¯ÊýÊÇ»ùÓÚC±à³ÌµÄWindows SDKµÄ¼¼Êõ£¬²»ÊÇÕë¶ÔC++µÄ£¬³ÌÐòÔ±¿ÉÒÔ½«Ò»¸öCº¯ÊýÖ±½Ó×÷Ϊ»Øµ÷º¯Êý£¬µ«ÊÇÈç¹ûÊÔͼֱ½ÓʹÓÃC++µÄ³ÉÔ±º¯Êý×÷Ϊ»Øµ÷º¯Êý½«·¢Éú´íÎó£¬ÉõÖÁ±àÒë¾Í²»ÄÜͨ¹ý¡£
·ÖÎöÔÒò£º
ÆÕͨµÄC++³ÉÔ±º¯Êý¶¼Òþº¬ÁËÒ»¸ö´«µÝº¯Êý ......
N µ±ÓÃÁ½¸ö²¹Âë±íʾµÄ´ø·ûºÅÊý½øÐÐÔËËãʱ£¬N=1±íʾÔËËãµÄ½á¹ûΪ¸ºÊý£»N=0±íʾÔËËãµÄ½á¹ûΪÕýÊý»òÁã.
Z Z=1±íʾÔËËãµÄ½á¹ûΪÁ㣬Z=0±íʾÔËËãµÄ½á¹û·ÇÁã¡£
C ¿ÉÒÔÓÐ4ÖÖ·½·¨ÉèÖÃCµÄÖµ£º
¼Ó·¨ÔËË㣨°üÀ¨CMN£©£ºµ±ÔËËã½á¹û²úÉúÁ˽øÎ»Ê±£¨ÎÞ·ûºÅÊýÒç³ö£©£¬C=1£¬·ñÔòC=0¡£
¼õ·¨ÔËË㣨°üÀ¨CMP£©£ºµ±ÔËËãʱ²úÉúÁ˽èλʱ£¨ÎÞ·ûºÅÊ ......
ÔÚC/C++ÖУ¬ÄÚ´æÖÐÊý¾Ý´æ´¢·Ö³É4¸öÇø£¬·Ö±ðÊǶѡ¢Õ»¡¢È«¾Ö/¾²Ì¬´æ´¢ÇøºÍ³£Á¿´æ´¢Çø¡£
Õ»(stack)£¬¾ÍÊÇÄÇЩÓɱàÒëÆ÷ÔÚÐèÒªµÄʱºò·ÖÅ䣬ÔÚ²»ÐèÒªµÄʱºò×Ô¶¯Çå³ýµÄ±äÁ¿µÄ´æ´¢Çø¡£ÀïÃæµÄ±äÁ¿Í¨³£ÊǾֲ¿±äÁ¿¡¢º¯Êý²ÎÊýµÈ¡£
¶Ñ(heap)£¬Ò»°ãÓ ......