惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
TaoSecurity Blog
TaoSecurity Blog
H
Heimdal Security Blog
Help Net Security
Help Net Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
N
News | PayPal Newsroom
V2EX - 技术
V2EX - 技术
博客园 - 【当耐特】
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
有赞技术团队
有赞技术团队
S
Schneier on Security
S
SegmentFault 最新的问题
Google Online Security Blog
Google Online Security Blog
H
Hacker News: Front Page
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
PCI Perspectives
PCI Perspectives
IT之家
IT之家
Project Zero
Project Zero
博客园 - 司徒正美
P
Privacy International News Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Jina AI
Jina AI
Security Latest
Security Latest
Hacker News - Newest:
Hacker News - Newest: "LLM"
腾讯CDC
C
CXSECURITY Database RSS Feed - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
V
Vulnerabilities – Threatpost
W
WeLiveSecurity
NISL@THU
NISL@THU
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
L
Lohrmann on Cybersecurity

博客园 - mumuliang

php.ini 开发和线上配置的差异 [laravel]malformed header from script 'index.php': Bad header: HTTP/1.1 302 Found, referer: http://localhost/auth/login 4e00~9fa5 [todo] 3rd [笔记] 为了不让移动端页面分权重你应当如何做? 一样的alert代码,样式不同 Eclipse中Sever启动成功,但tomcat无法管理页面无法访问。 Process的Waitfor() 引起代码死锁 [转载]Eclipse调试Java的10个技巧 写了一阵儿西夏普以后回头写西加加你会想不起来的那些事儿 为毛无法创建文本文件COM1.txt PADS在注册表中的菜单栏数据 C# Marshal.GetActiveObject() 遭遇 HRESULT:0x800401E3 (MK_E_UNAVAILABLE)) AutoVue打开ProE工程图中文乱码 Visual studio智能感知挡住了当前代码输入行 创建COM对象时遭遇 800702e4 以Administrator权限运行VS时无法拖入文件 如何判断exe或dll的目标平台及是否是.NET? 批处理设置当前路径为工作路径
调用约定__cdecl和__stdcall
mumuliang · 2014-10-27 · via 博客园 - mumuliang

首先,__cdecl,c declaration,C风格声明。或者 c default calling(笔者瞎编的)。(那么问题来了,为什么PASCAL风格被称为std?)

调用约定的内容包括三点:参数出入栈顺序,弹栈工作由谁做,以及产生函数名的方式(renaming?)

1.

在参数入栈顺序上,__cdecl和__stdcall没有区别都是从右往左;

2.

__cdecl既然是c/c++默认,让我们回忆下下stl中的printf这样的变长参数函数,只有调用者才知道实参的情况,因此由调用者去负责恢复栈,大概是比较恰当的。

那么结论来了,__cdecl,指定了由调用者负责弹栈。

接着往下……

调用者负责弹栈,意味着,在最终的可执行代码中,所有调用被指定为__cdecl的方法的地方都会相对__stdcall多生成一段清理栈的代码。

换句话说,如果windows API作为一套已存在的系统/二进制码/或者其他什么,当它在调用应用程序提供的函数的时候,已经没办法知道程序员提供的方法(CALLBACK/WINAPI)要如何清理栈,

更不可能有机会将处理栈的代码新增到这套已经存在的“系统/二进制码/或者其他什么”中,因此必须由函数提供方自行处理栈。

这也就是CALLBACK/WINAPI为什么是__stdcall的原因。

3.

略。