如何解决在 C 中调用函数到汇编
如果我们有以下函数:
int func(int n,float f,char* s,double* d);
对 Assembly
中函数的调用将如下所示:
movl <n>,%ecx
movl <s>,%edx
pushl <d>
pushl <f>
call func
这是正确的吗?为什么是这个顺序?是因为每种类型的大小吗?
解决方法
对于已知的论点,从右向左或相反方向推的理由并不充分,因此这只是要遵循的惯例。
对于可变参数,以相反的顺序推送它们是有好处的,因为被调用者不知道传递了多少个参数。但第一个参数位于已知位置,即在返回地址之后。
因此,如果您考虑 printf
的示例:
printf(FormatString,a1,a2,a3,a4);
所以 FormatString
现在处于已知位置,可以轻松找到通过堆栈的其他参数。
如果是相反的方式,那么被调用者需要获得一些额外的信息才能找到第一个参数,或者是一个指针,或者一个计数器或其他东西,告诉它在哪里找到格式字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。