#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void fun()
{
printf("i am the evil func\n");
exit(1);
}
int fun1(int a,int b)
{
int *p=&a;
p--;
*p=fun;
int c=0xcccc;
return c;
}
int main()
{
printf("begin run..\n");
int a=0xaaaa;
int b=0xbbbb;
fun1(a,b);
printf("right end");
return 0;
}linux下执行结果:
main调用fun1调用fun---exit退出
对于此结果的问题:
明明没有调用fun函数,为什么会执行fun函数,函数是如何进行跳转的?
栈帧是怎么样保存信息并返回的?
分析原因:
查看汇编代码中的重要的栈段
简易栈帧图
下面一个程序通过指针访问变量y的值,而不是变量名y
#include <stdio.h>
int fun(int x,int y)
{
int *p = x;
p--;
return *p;
}
int main()
{
int x=1;
int y=2;
int ret=fun(x,y);
printf("y的值是%d\n"ret);
return 0;
}原理就是p-->x,p--之后,p指向y
此时*p访问的就是y的值
本文出自 “momo就是辣么萌” 博客,请务必保留此出处http://momo462.blog.51cto.com/10138434/1791894
原文地址:http://momo462.blog.51cto.com/10138434/1791894