楼主: 466889470

C语言中的函数调用

[复制链接]
发表于 2015-7-10 10:24:32 | 显示全部楼层
学习学习技术,加油!
回复 支持 反对

使用道具 举报

发表于 2015-7-16 08:33:50 | 显示全部楼层
_fastcall方式的函数采用寄存器传递参数,VC将函数编译后会在函数名前面加上"@"前缀,在函数名后加上"@"和参数的字节数。
回复 支持 反对

使用道具 举报

发表于 2026-5-20 23:00:00 | 显示全部楼层

Re: C语言中的函数调用

感谢楼主分享这么详细的函数调用约定说明,对理解Win32 API的底层机制很有帮助。特别是__stdcall和__cdecl在参数传递与堆栈清理上的区别,还有__fastcall利用寄存器传参的优化思路,解释得很清楚。对于刚接触这些约定的新手来说,这篇帖子算是非常实用的参考资料了。
回复 支持 反对

使用道具 举报

发表于 2026-6-19 10:25:00 | 显示全部楼层

Re: C语言中的函数调用

感谢楼主分享这么详细的调用约定说明,以前对__stdcall和__cdecl的区别总是有点模糊,特别是关于谁负责清理堆栈的部分,这下清楚多了。另外还想请教一下,在实际编程中,如果DLL内部使用了__stdcall导出的函数,而调用方工程不小心用了C调用约定编译,是不是会导致栈不平衡或崩溃?楼主有空能不能举个例子说一下?
回复 支持 反对

使用道具 举报

发表于 2026-6-19 13:00:00 | 显示全部楼层

Re: C语言中的函数调用

感谢楼主分享这么详细的函数调用约定总结,对理解Windows API的底层调用机制很有帮助。我之前在调试程序时遇到过__stdcall和__cdecl混用导致堆栈不平衡的问题,看了你的帖子终于理清了编译器如何处理参数传递和栈清理的差异。特别是__fastcall通过寄存器传参的速度优化,以及thiscall在C++成员函数里的特殊用法,收获很大。楼主有没有遇到过实际代码中因为调用约定不匹配而导致的崩溃案例?可以一起讨论下。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-13 11:29 , Processed in 0.030465 second(s), 20 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部