关于栈溢出笔记

昨天网上看了篇关于栈溢出的 文章.这里做下写笔记.

调试环境windosxp,vc6.

函数入栈是从右到左的方式压入的.栈是从高地址向低地址增长的.堆则相反.

如函数:

Functio(char* param1, int param2);

 {         int   函数内变量1; char  函数内变量2; ..... }

下面是具体代码

#include  < stdio.h >
#include 
< string .h >

#define  SRC_BUF_SIZE    8             

#define  ATTACK_ADD0        (SRC_BUF_SIZE)
#define  ATTACK_ADD1        (SRC_BUF_SIZE+1)
#define  ATTACK_ADD2        (SRC_BUF_SIZE+2)
#define  ATTACK_ADD3        (SRC_BUF_SIZE+3)            

static   void  test( char   * );
static   void  attack_code( void );

int  main()
{
    
char src_buf[SRC_BUF_SIZE] = {0x41,0x42,0x43,0x45,0x45,0x46,0x47,0x48};
    
    
//0x00401100就是attack_code函数的返回地址。
    src_buf[ATTACK_ADD0] = 0x70;
    src_buf[ATTACK_ADD1] 
= 0x11;
    src_buf[ATTACK_ADD2] 
= 0x40;
    src_buf[ATTACK_ADD3] 
= 0x00;
    
    printf(
"%p "&attack_code);

    test(src_buf);

    
return 0;
}


static   void  test( char   * src_buf)
{
    
//如果函数内部变量的大小不是4的倍数,那么在计算返回地址时请按4的倍数地址计算
    char des_buf[4];
    
int  *= NULL;

    
//用词函数是为了覆盖test函数的返回地址
    strcpy(des_buf, src_buf);
}


static   void  attack_code( void )
{
    printf(
"Attack start!  ");
    printf(
"Attack code runing...!  ");
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值