缓冲区溢出原理及Linux系统下实例

本文详细介绍了缓冲区溢出的概念,包括破坏栈和修饰返回地址两个关键操作。阐述了内存存储分配,重点讲解了栈、堆、EIP、ESP和EBP等寄存器的作用。接着,解释了栈溢出攻击的实现原理,指出通过覆盖返回地址控制程序执行。在Linux Kali环境下,给出了编写和编译32位代码的实例,演示了如何利用缓冲区溢出触发特定函数的执行。
摘要由CSDN通过智能技术生成
1.缓冲区溢出的两个操作:

破坏栈 smash the stack

修饰函数返回地址 modify the return address of the function

2.内存的存储分配:

from high address to low address:

command-line arguments and environment variables:程序运行之前存在的变量和环境变量

stack:栈,存放函数参数,返回地址和函数本地变量的位置。存储时往下走。

heap:堆,存放动态存储空间,malloc从此分配。存储时往上走。

uninitialized data(Bss egment):存放所有未初始化的变量,包括全局和静态变量

initialized data(Data Segment):存放所有初始化的变量

text:存储代码,一般只读

3.常用寄存器:
  • EIP:指令寄存器。存放下一个CPU指令存放的内存地址,当CPU执行完当前指令后,就会从EIP寄存器中读取下一条指令的内存地址。每条指令执行过后,它的大小就会根据新指令的大小变化。
  • ESP:堆栈寄存器。存放栈顶,也就是最后一个元素的位置。常处于最低的内存地址。堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP就会越来越小。在32位平台上,ESP每次减少4字节。
  • EBP:基指针寄存器。用来存储当前函数状态的基地址,在函数运行时不变,可以用来索引确定函数参数或局部变量的位置。
4.栈的基本模型及函数调用状态
参数N 高->低地址
arg2 调用参数 ,函数中的参数从右至左入栈
arg1
Return Address 返回地址 ,将进行调用之后的下一条指令地址作为返回地址压栈,存储EIP信息
Caller’s ebp 将当前寄存器的值(调用函数的
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值