IT技术互动交流平台

Linux中程序的栈帧分析以及修改函数地址

作者:佚名  来源:IT165收集  发布日期:2016-06-24 21:57:09

下面有一段代码:
#include
#include
#include
 
void fun()
{
   printf("i am the evil func ");
   exit(1);
}
 
int fun1(int a,int b)
{
    int *p=&a;
    p--;
    *p=fun;
    int c=0xcccc;
    return c;
}
 
int main()
{
    printf("begin run.. ");
    int a=0xaaaa;
    int b=0xbbbb;
    fun1(a,b);
    printf("right end");
    return 0;
    
}
linux下执行结果:
main调用fun1调用fun---exit退出
对于此结果的问题:
明明没有调用fun函数,为什么会执行fun函数,函数是如何进行跳转的?
栈帧是怎么样保存信息并返回的?
分析原因:
查看汇编代码中的重要的栈段


简易栈帧图

下面一个程序通过指针访问变量y的值,而不是变量名y
#include
 
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 "ret);
    return 0;
}
原理就是p-->x,p--之后,p指向y
此时*p访问的就是y的值
 

延伸阅读:

Tag标签: 函数   地址   程序  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规