linux - 32位系统中多于4个字节的函数返回值是怎么存储的?
黄舟
黄舟 2017-04-17 11:24:38
[Linux讨论组]

今天在网上学习 朴素Linux. 了解了函数的返回值一般放在 eax 寄存器中,也就是一般返回值不超过4个字节。

如果我要返回一个多于4于四个字节的结果,比如一个超过 4 字节的结构体。结果怎么存呢,还是用eax吗?

感谢 Theo 的回答。 看了他推荐的文章,我发现自己要问的是 cdecl 这种调用约定中,如何返回超大的对象或结构体

现在我自己来解答一下:整数值或内存地址,是通过EAX寄存器返回的。对于较小的结构体或对象,可以通过EAX:EDX寄存器对返回。对于超大的对象或结构体,caller在调用函数之前会分配出内存空间,然后把这个空间地址作为第一个参数隐式地传给函数。被调用的函数callee把结果写进这片内存空间,然后pop空间地址,然后返回。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
PHPz

你给的条件太宽泛了,怎么存储跟体系结构、编译器、操作系统以及调用约定的关系相当大,不能一概而论,因此不能给你一个简单的回答,不过首先要把这篇看完入门: http://en.wikipedia.org/wiki/X86_calling_conventions

剩下的部分就是查阅各个编译器、操作系统等手册了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号