¼¸ÖÖ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++ºÍJava ÄĸöºÃ. Æäʵ¼¼ÊõÉϸ÷Óи÷µÄºÃ´¦Óë²»×ã,ÎÒÏë´ó¼ÒËù˵µÄºÃ²»ºÃÖ¸µÃÊÇǰ;ºÃ²»ºÃ,׬µÄ¶à²»¶à.
Ҫ˵׬Ǯ×î¶àµÄ¿Ï¶¨ÊÇC++ÁË.ÒòΪһÃż¼ÊõÊÇ·ñֵǮȫ¿´»áËüµÄÈËÓжàÉÙ¶ø²»ÔÚÓÚÕâ¸ö¼¼Êõ±¾ÉíµÄºÃ»µ. C++Éæ¼°Ó²¼þµ×²ãµÄ¶«Î÷±È½Ï¶à,ѧÆðÀ´ºÜ¸´ÔÓ,»áµÄÈËÉÙ,ËùÒÔֵǮ.
&nb ......
ÕâÆªÎÄÕÂÊÇʹÓÃSQLite C/C++½Ó¿ÚµÄÒ»¸ö¸ÅÒª½éÉܺÍÈëÃÅÖ¸ÄÏ¡£
ÓÉÓÚÔçÆÚµÄSQLiteÖ»Ö§³Ö5¸öC/C++½Ó¿Ú£¬Òò¶ø·Ç³£ÈÝÒ×ѧϰºÍʹÓ㬵«ÊÇËæ×ÅSQLite¹¦ÄܵÄÔöÇ¿£¬ÐµÄC/C++½Ó¿Ú²»¶ÏµÄÔö¼Ó½øÀ´£¬µ½ÏÖÔÚÓг¬¹ý150¸ö²»Í¬µÄAPI½Ó¿Ú¡£ÕâÍùÍùʹ³õѧÕßÍû¶øÈ´²½¡£ÐÒÔ˵ÄÊÇ£¬´ó¶àÊýSQLiteÖеÄC/C++½Ó¿ÚÊÇרÓõģ¬Òò¶øºÜÉÙ±»Ê¹Óõ½¡£¾¡¹ÜÓÐÕâ ......
C/C++ÊÇ×îÖ÷ÒªµÄ±à³ÌÓïÑÔ¡£ÕâÀïÁгöÁË50ÃûÓÅÐãÍøÕ¾ºÍÍøÒ³Çåµ¥£¬ÕâÐ©ÍøÕ¾Ìṩc/c++Ô´´úÂë ¡£Õâ·ÝÇåµ¥ÌṩÁËÔ´´úÂëµÄÁ´½ÓÒÔ¼°ËüÃǵÄС˵Ã÷¡£ÎÒÒѾ¡Á¦°üÀ¨×î¼ÑµÄC/C++Ô´´úÂëµÄÍøÕ¾¡£Õâ²»ÊÇÒ»¸öÍêÕûµÄÇåµ¥£¬ÄúÓн¨Òé¿ÉÒÔÁªÏµÎÒ£¬ÎÒ½«»¶ÓÄúµÄ½¨ Ò飬ÒÔ½øÒ»²½¼ÓÇ¿Õâ·½ÃæµÄÇåµ¥¡£
1¡¢http://snippets.dzone.com/tag/c/ --ÊýÒÔǧ ......