利用两个小demo理解汇编代码排查内存溢出问题

news2024/11/24 5:42:22

利用两个小demo理解汇编代码排查内存溢出问题 icon-default.png?t=M85Bhttps://www.cnblogs.com/liuchuanloong/articles/16925695.html

【背景】

近日处理现场问题时遇到了踩内存导致的崩溃问题,然而个人对反汇编程序执行过程不熟悉,通过查阅资料,对比分析两个小demo理解汇编代码踩内存的分析。

【基础】

对于反汇编过程,首先需要理解的是寄存器。以64位寄存器rax为例,其中0到31就是平常分析32位程序是常见的eax,0到15则是ax,而ah和al则分别是8到15和0到7。其中rax常用来做存储返回值的寄存器,rdi,rsi,rdx,rcx,r8,r9常用作函数的参数传递寄存器,分别对应函数的第1~6个参数,rbp、rsp、rip分别对应栈基、栈顶、指向当前栈帧中执行的指令。函数的入参顺序这里不做说明,感兴趣可以了解__stdcall、__fastcall。

对于寻址问题,这里列出几种寻址方式,具体可查阅相关资料。

【问题解析】

 

这里写了一个demo,先分析该demo的Begin函数的调用堆栈,如下图所示

函数在栈中内存分布大致分为四个部分:

参数空间

Call指令执行完的下一条指令地址

前EBP的值(当前EBP中保存)

局部变量空间

注意:对于__security_cookie取决于编译器

___security_cookie机制,防止栈溢出___security_cookie机制,防止栈溢出 - mavaL - 博客园

先分析正常函数的例子:

 

Begin函数的ebp地址为0xC8,存储main函数ebp,向下偏移4个字节为_security_cookies,向下偏移8个字节为数组地址,这里注意数组大小为6,为了内存对齐分配8个字节,向下偏移4个字节为result(int),向下偏移4个字节为数组首地址(MemCpy的参数),再向下偏移4字节地址为call下一条指令的地址,再向下4个字节为MemCpy函数的ebp

 

当我们修改memcpy函数将hello word!!!!(截图有误)写进大于dst空间的内存,运行马上崩溃。

 

分析此时的栈内存,这里看到函数Begin函数的ebp 0x0137fa5c 所存储的数据(0x0137fa50,实际为main函数的地址)被修改为(0x01000000)

【分析工具】

踩内存问题被发现,通常是程序崩溃的时候,能够生成coredump分析,知道是哪个内存被踩了,但通常是很难分析出是哪段代码出现了踩内存的问题,也就是内存践踏的第一现场,我们只能借助工具排查。

对于简单的容易发现内存被篡改的可以使用VS自带数据断点和Gdb watch,对于复杂问题可参考Mprotect、Asan、Perf(hardware breakpoint)、Valgrind、Magic number等工具。

https://blog.csdn.net/zz460833359/article/details/121769216

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/43380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不适用于云的应用程序有哪些?

所有应用程序都适合在云上运行吗?这是在云计算中寻求改进IT解决方案的企业经常问的一个问题。这个问题的答案是“视情况而定”。虽然企业云的应用正在飞速发展,大多数企业都在考虑将整个应用程序迁移到云上,以实现可伸缩、灵活、可访问、敏捷和精益的工…

PC端配置定位服务步骤(依赖于腾讯位置服务)

目录 第一步 : 安装 jsonp 第二步 : 在mian.js中配置并使用 第三步 : 在 manifest.json中进行相关配置 第四步 : 获取经纬度值,从而得到地址 第一步 : 安装 jsonp 执行此代码 : np…

Origin2022安装教程

Origin2022他来了! 本人虽然是Python和R的资深绘图用户,偶尔也用用Origin,Origin的优势区间是手动、全可控,要素复杂事图片效果好: 安装方法和安装包下载破解见文末: Origin 2022新要素 1.对地理要素和…

基于 51 单片机室内灯光控制系统

1. 功能介绍 这是基于 STC89C52 单片机设计的灯光控制系统,实现对室内灯光的控制,采集光敏传感器,红外线热释电传感器,声音传感器,光照照度传感器等数据进行处理,完成室内灯光的智能控制。 支持的功能与设…

VBox组件内部局域网

我使用VirtualBox并不是很专业,只是拿它来组件服务器。后来这个虚拟机对我越来越重要,我的各种测试服务器和学习服务器越来越多,于是我就给他们规划了IP地址,像这样: 我用的网络一直都是桥接,每个虚拟机都可以上网&…

高性能HTTP和反向代理Web服务器 - Nginx

Nginx一、安装1.1.Windows安装1.2.Linux安装1.3.常用命令二、动静分离三、反向代理3.1.正向代理3.2.反向代理四、负载均衡4.1.轮询4.2.加权轮询4.3.Ip hash五、限流六、缓存七、黑白名单Nginx是一个高性能的HTTP服务器和反向代理的web服务器,同时也提供IMAP&#xf…

一文带你读懂公司卫生间一直有人窜稀的原理

不知道你有没有这样的经历,一直忙忙碌碌,需求不断,当你终于解决完手头的事情,突然特别着急想要去卫生间的时候,仅有的几个门总是关着的,于是怀疑,可能其他人更需要这次机会,他们也一…

华为云安装Docker,在其中安装Tomcat运行Html项目一步到位

一日不学习浑身难受,对于追光者的我来说,就是这种情况!!!今天心血来潮,想把云服务器、Docker、Tomcat、Html项目集成一块进行练习,为了后面的部署项目做准备。 环境介绍:华为云cent…

KafKa存储机制

目录 存储机制 kafka 存储选型 Kafka 存储方案剖析 kafka 存储架构设计 kafka 日志系统架构设计 日志目录布局 磁盘数据存储 可靠性 Producer的可靠性保证 kafka 配置为 CP系统 kafka 配置为 AP系统 Broker 的可靠性保证 Consumer 的可靠性策略 AutoCommit&#xff…

【二叉树从无到有】

目录:前言一、树1.什么是树结构?2.为什么使用树结构?3.树的概念4.树的表示5.树在现实生活中的应用二、二叉树(一)二叉树概念既结构1.概念2.现实中的二叉树3.特殊的二叉树4.二叉树的性质5.二叉树的存储结构(…

线程的深度剖析

线程和进程的区别和联系: 1.进程可以处理多并发编程的问题,但是进程太重,主要指它的资源分配和资源回收上,进程消耗资源多,速度慢,其创建、销毁、调度一个进程开销比较大。 2.线程的出现有效地解决了这一…

面向对象的个人理解(使用JAVA代码描述)

前言 功能分类 类(class)的第一个功能是隔离,起到边界的作用,使得不同功能的代码互不干扰。 干扰的起源 在非面向对象的语言中,我们主要定义结构和函数来实现功能。下边用C语言来举个例子。 某程序员写了宠物模拟…

Ajax学习:nodejs安装+express框架介绍

ajsx应用中,需要安装nodejs环境 基于Chrome V8引擎(和浏览器上的谷歌的解析引擎一样)JavaScript运行环境 (31条消息) Node.js_安装_哇嘎123的博客-CSDN博客 查看安装是否完成 express框架介绍--为了创建一个web服务器 (31条消息) Express…

Spark系列之Spark体系架构

title: Spark系列 第四章 Spark体系架构 4.1 Spark核心功能 Alluxio 原来叫 tachyon 分布式内存文件系统Spark Core提供Spark最基础的最核心的功能,主要包括: 1、SparkContext 通常而言,DriverApplication的执行与输出都是通过SparkC…

STM32G491RCT6,STM32H743BIT6规格书 32bit IC MCU

STM32G4系列将强大的ArmCortex-M4加上FPU和DSP能力与丰富和先进的模拟外设相结合。它引入了两种新的数学加速器(Cordic和Filtering), CAN-FD (Flexible Datarate),USB Type-C接口的功率传输,包括物理层(PHY)和先进的安全功能。(图…

Day38——Dp专题

DP专题 动态规划五部曲: 确定dp数组以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历顺序 举例推导dp数组 1.斐波那契数 题目链接:509. 斐波那契数 - 力扣(LeetCode) 思路:做dp类题目,根据…

Meta 内部都在用的 FX 工具大起底:利用 Graph Transformation 优化 PyTorch 模型

PyTorch 中的 graph mode 在性能方面表示更为出色,本文介绍 Torch.FX 这个强大工具,可以捕捉和优化 PyTorch 程序 graph。 一、简介 PyTorch 支持两种执行模式:eager mode 和 graph mode。 eager mode 中,模型中的运算符在读取时…

JUC并发编程

目录JUC概述什么是JUC进程与线程的概念线程的状态线程的方法并发与并行管程(Monitor)用户线程和守护线程Lock接口Synchronized 关键字Synchronized 作用范围Synchronized 实现卖票例子Lock接口什么是LockLock与synchronized的区别可重入锁(ReentrantLock&#xff09…

剑桥大学哪些专业需要IB物理成绩?

如果IB学生申请目标是剑桥大学,那么申请哪些专业需要学习IBDP物理课程?要不要学习IBDP物理课程呢?剑桥大学:IB成绩要求高,招录竞争激烈 在申请英国大学之前,理性的申请者都会提前查看一下目标大学的学术成绩…

Python破解WIFI源代码,测试成功(暴力跑字典)

目录 1,先安装Python环境(这个不用多说了吧) 2,安装PyWifi 3,自己手工整理高频弱口令,不建议程序生成的字典,生成的字典成功率实在太低。 4,自己生成字典的算法: 5,破解WIF代码第一种&#…