C\C++º¯Êýµ÷Óõļ¸ÖÖ·½Ê½
µ÷Óú¯Êýʱ£¬¼ÆËã»ú³£ÓÃÕ»À´´æ´¢´«µÝ¸øº¯ÊýµÄ²ÎÊý¡£
Õ»ÊÇÒ»ÖÖÏȽøºó³öµÄÊý¾Ý½á¹¹£¬Õ»ÓÐÒ»¸ö´æ´¢Çø¡¢Ò»¸öÕ»¶¥Ö¸Õë¡£Õ»¶¥Ö¸ÕëÖ¸Ïò¶ÑÕ»ÖеÚÒ»¸ö¿ÉÓõÄÊý¾ÝÏ±»³ÆÎªÕ»¶¥£©¡£Óû§¿ÉÒÔÔÚÕ»¶¥ÉÏ·½ÏòÕ»ÖмÓÈëÊý¾Ý£¬Õâ¸ö²Ù×÷±»³ÆÎªÑ¹Õ»(Push)£¬Ñ¹Õ»ÒÔºó£¬Õ»¶¥×Ô¶¯±ä³ÉмÓÈëÊý¾ÝÏîµÄλÖã¬Õ»¶¥Ö¸ÕëÒ²ËæÖ®Ð޸ġ£Óû§Ò²¿ÉÒÔ´Ó¶ÑÕ»ÖÐÈ¡×ßÕ»¶¥£¬³ÆÎªµ¯³öÕ»(pop)£¬µ¯³öÕ»ºó£¬Õ»¶¥ÏµÄÒ»¸öÔªËØ±ä³ÉÕ»¶¥£¬Õ»¶¥Ö¸ÕëËæÖ®Ð޸ġ£º¯Êýµ÷ÓÃʱ£¬µ÷ÓÃÕßÒÀ´Î°Ñ²ÎÊýѹջ£¬È»ºóµ÷Óú¯Êý£¬º¯Êý±»µ÷ÓÃÒÔºó£¬ÔÚ¶ÑÕ»ÖÐÈ¡µÃÊý¾Ý£¬²¢½øÐмÆËã¡£º¯Êý¼ÆËã½áÊøÒԺ󣬻òÕßµ÷ÓÃÕß¡¢»òÕߺ¯Êý±¾ÉíÐ޸ĶÑÕ»£¬Ê¹¶ÑÕ»»Ö¸´Ô×°¡£
ÔÚ²ÎÊý´«µÝÖУ¬ÓÐÁ½¸öÖØÒªµÄÎÊÌâ±ØÐëÒªÃ÷ȷ˵Ã÷£º
1. µ±²ÎÊý¸öÊý¶àÓÚÒ»¸öʱ£¬°´ÕÕʲô˳Ðò°Ñ²ÎÊýѹÈë¶ÑÕ»£»
2. º¯Êýµ÷Óúó£¬ÓÉËÀ´°Ñ¶ÑÕ»»Ö¸´Ô×´¡£
Ôڸ߼¶ÓïÑÔÖУ¬¾ÍÊÇͨ¹ýº¯ÊýµÄµ÷Ó÷½Ê½À´ËµÃ÷ÕâÁ½¸öÎÊÌâµÄ¡£³£¼ûµÄµ÷Ó÷½Ê½ÓУº
stdcall
cdecl
fastcall
thiscall
thiscall
naked call
ÏÂÃæ¾Í·Ö±ð½éÉÜÕ⼸ÖÖµ÷Ó÷½Ê½£º
1. stdcall
stdcallµ÷Ó÷½Ê½ÓÖ±»³ÆÎªPascalµ÷Ó÷½Ê½¡£ÔÚMicrosoft C++ϵÁеÄC/C++±àÒëÆ÷ÖУ¬Ê¹ÓÃPASCALºê£¬WINAPIºêºÍCALLBACKºêÀ´Ö¸¶¨º¯ÊýµÄµ÷Ó÷½Ê½Îªstdcall¡£
stdcallµ÷Ó÷½Ê½µÄº¯ÊýÉùÃ÷Ϊ£º
int _stdcall function(int a, int b);
stdcallµÄµ÷Ó÷½Ê½Òâζ×Å£º
£¨1£© ²ÎÊý´ÓÓÒÏò×óÒ»´ÎѹÈë¶ÑÕ»
£¨2£© Óɱ»µ÷Óú¯Êý×Ô¼ºÀ´»Ö¸´¶ÑÕ»
£¨3£© º¯ÊýÃû×Ô¶¯¼Óǰµ¼Ï»®Ïߣ¬ºóÃæ½ô¸ú×ÅÒ»¸ö@,Æäºó½ô¸ú×ŲÎÊýµÄ³ß´ç
ÉÏÃæÄǸöº¯Êý·Òë³É»ã±àÓïÑÔ½«±ä³É£º
push b ÏÈѹÈëµÚ¶þ¸ö²ÎÊý
push a ÔÙѹÈëµÚÒ»¸ö²ÎÊý
call function µ÷Óú¯Êý
ÔÚ±àÒëʱ£¬´Ëº¯ÊýµÄÃû×Ö±»·ÒëΪ_function@8
2. cdecl
cdeclµ÷Ó÷½Ê½ÓÖ³ÆÎªCµ÷Ó÷½Ê½£¬ÊÇCÓïÑÔȱʡµÄµ÷Ó÷½Ê½£¬ËüµÄÓ﷨Ϊ£º
int function(int a, int b) // ²»¼ÓÐÞÊηû¾ÍÊÇCµ÷Ó÷½Ê½
int _cdecl function(int a, int b) // Ã÷È·Ö¸¶¨ÓÃCµ÷Ó÷½Ê½
cdeclµÄµ÷Ó÷½Ê½¾ö¶¨ÁË£º
£¨1£© ²ÎÊý´ÓÓÒÏò×óÒÀ´ÎѹÈë¶ÑÕ»
£¨2£© Óɵ÷ÓÃÕ߻ָ´¶ÑÕ»
£¨3£© º¯ÊýÃû×Ô¶¯¼Óǰµ¼Ï»®Ïß
ÓÉÓÚÊÇÓɵ÷ÓÃÕßÀ´»Ö¸´¶ÑÕ»£¬Òò´ËCµ÷Ó÷½Ê½ÔÊÐíº¯ÊýµÄ²ÎÊý¸öÊýÊDz»¹Ì¶¨µÄ£¬ÕâÊÇCÓïÑÔµÄÒ»´óÌØÉ«¡£
´Ë·½Ê½µÄº¯Êý±»·ÒëΪ£º
push b // ÏÈѹÈëµÚ¶þ¸ö²ÎÊý
push a // ÔÚѹÈëµÚÒ»¸ö²ÎÊý
call funtion // µ÷Óú¯Êý
add
Ïà¹ØÎĵµ£º
ϵͳ»·¾³£ºWindows 7
Èí¼þ»·¾³£ºVisual C++ 2008 SP1 +SQL Server 2005
±¾´ÎÄ¿µÄ£º±àдһ¸öº½¿Õ¹ÜÀíϵͳ
ÕâÊÇÊý¾Ý¿â¿Î³ÌÉè¼ÆµÄ³É¹û£¬ËäÈ»³É¼¨²»¼Ñ£¬µ«ÊÇ×÷ΪÎÒÓÃVC++ ÒÔÀ´±àдµÄ×î´ó³ÌÐò»¹ÊÇ´«µ½ÍøÉÏ£¬ÒÔ¹©²Î¿¼¡£ÓÃVC++ ×öÊý¾Ý¿âÉè¼Æ²¢²»ÈÝÒ×£¬µ«Ò²²»ÊDz»¿ÉÄÜ¡£ÒÔÏÂÊÇÎҵijÌÐò½çÃæ£¬ºóÃæ ......
11.1 ¶¨ÒåÒ»¸ö½á¹¹µÄÒ»°ãÐÎʽ
ÔÚʵ¼ÊÎÊÌâÖУ¬Ò»×éÊý¾ÝÍùÍù¾ßÓв»Í¬µÄÊý¾ÝÀàÐÍ¡£ÀýÈ磬ÔÚѧÉúµÇ¼Ç±íÖУ¬ÐÕÃûӦΪ×Ö·ûÐÍ£»Ñ§ºÅ¿ÉΪÕûÐÍ»ò×Ö·ûÐÍ£»ÄêÁäӦΪÕûÐÍ£»ÐÔ±ðӦΪ×Ö·ûÐÍ£»³É¼¨¿ÉΪÕûÐÍ»òʵÐÍ¡£ ÏÔÈ»²»ÄÜÓÃÒ»¸öÊý×éÀ´´æ·ÅÕâÒ»×éÊý¾Ý¡£ÒòΪÊý×éÖи÷ÔªËØµÄÀàÐͺͳ¤¶È¶¼±ØÐëÒ»Ö£¬ÒÔ±ãÓÚ±àÒëϵͳ´¦Àí¡ ......
rows="2" cols="20" id="ctl00_ctl00_cphContent_cphDoc_EntryEditor1_richTextEditor" class="mceEditor" style="height:450px;width:100%;">
Õ»ÊÇÊý¾Ý½á¹¹ÖÐ×î»ù´¡Ò²ÊÇ×î¾µäµÄÊý¾Ý½á¹¹£¬ÎÞÂÛÔÚÓ¦Óû¹ÊDzÙ×÷ϵͳÖоù¿ÉÒÔ¿´µ½ÆäÉíÓ°¡£Õ»ÊÇÒ»ÖÖÌØÊâµÄ
ÏßÐÔ±í£¬¼´ÏÞÖÆÔÚ±íµÄÒ»¶Ë½øÐвåÈ롢ɾ³ýÔËË㡣ͨ³£²åÈ롢ɾ³ýµÄÒ»¶Ë³ ......
ÉÏѧÆÚ¼ä»ù±¾É϶¼ÔÚwindowsϱà³Ì£¬¾ÍÊÇѧÁËÒ»µãLINUX£¬Ò²ÊÇһЩ»ù±¾²Ù×÷£¬ÔÚLINUXϱà³Ì¼¸ºõûÓйý£¬Éϰàºó¶¼ÊÇÔÚUNIXϵĿª·¢£¬Í»È»Ö®¼äÓеã¸Ð¾õ×Ô¼ºÎÞ´¦ÏÂÊÖ£¬¸Ð¾õ²»»áÁË£¬×鳤ÈÃÎÒ±àÒ»¸ö³ÌÐò£¬ÎÒÏëÁ˰ëÌìÔÚÍøÉϲéÁ˰ëÌ죬Óеã˼·ÁË£¬ÔÚ±àÒëʱȷʵ´íÎóÁ¬Á¬£¬¸Ð¾õ¶¼ºÜÓÐѹÁ¦£¬µ«ÎÒ»áÂýÂýϰ¹ßµÄ£¬ÎÒÏàÐÅ×Ô¼º¡£
ÎÊÌ⣺
1 ......