逆向-数组-缓冲区溢出的解析
程序如下,由滴水逆向的老师提供:
#include <windows.h> #include <stdio.h> void Fun() { while(1) { printf("你好\n"); } } int check() { int arr[8]; arr[9]=(int)&Fun; return 0; } int main() { check(); getchar(); return; }
暑假好好复习了数据结构和汇编,学了点逆向再来看这个题目
1.首先数组是可以越界访问的,arr[9]不会报错
2.每次执行函数,会提升堆栈,把变量存入提升的堆栈中
3.但是如果存储内容溢出了提升的堆栈,会覆盖下面的值,即存储的EBP指针的原来地址等内容
4.程序结束时,进行堆栈平衡,导致返回地址出错,返回其他指令的地址,执行其他命令
以上大致就是缓冲区溢出的原理。
查看汇编代码:
中间一堆jmp,最后看见关键的:
进而最后程序出错,无法停止
作者: ch0bits
出处:https://www.cnblogs.com/echoDetected/p/13556791.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
分类:
逆向
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?