您的位置:首页 > 健康 > 美食 > 无忧建站_计算机技术移动互联网开发_抖音seo教程_西安网络推广公司大全

无忧建站_计算机技术移动互联网开发_抖音seo教程_西安网络推广公司大全

2024/12/24 0:57:09 来源:https://blog.csdn.net/liuyangwuhan1980/article/details/143057812  浏览:    关键词:无忧建站_计算机技术移动互联网开发_抖音seo教程_西安网络推广公司大全
无忧建站_计算机技术移动互联网开发_抖音seo教程_西安网络推广公司大全

C C++函数调用时的参数传递方法根据架构、编译器、函数调用方式的不同而有所不同,本文讲的是i386架构上使用C C++语言GNU编译器的情况。

在i386上,原则上参数全部堆放到栈上,以下用一个例子验证,编写如下程序并编译:

#include <stdio.h>void func(int a, long b, short c, char d, long long e,float f, double g,int* h, float* i, char* j)
{printf("func");
}int main()
{int pint = 1;float pfloat = 0.01;char buf[6] = {'H', 'e', 'l', 'l', 'o', '\0'};func(250, 25000L, 10, 'F', 123456789LL, 3.14, 3.1415926e8, &pint, &pfloat, &buf[0]);return 0;
}

i386架构中栈的开头保存了返回地址,并且整数或指针类型的大小为4字节。

将以上程序编译得到test程序:

root-> g++ -c -pipe -g -Wall -Wextra -fPIC -o main.o ./main.c

root-> g++ -o test main.o

使用gdb运行程序并设置断点在func函数处:

root-> gdb ./test

gdb> b func

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com