逆向汇编反汇编——函数分析

news2025/2/13 2:00:58

 

add esp,8就是把esp调整到函数调用之前的状态,用以平衡堆栈 

 

 

 默认采用的是cdcall:外平栈

stdcall:内平栈

什么是堆栈平衡?

》原来的堆栈是什么样的,函数调用之后堆栈还是什么样的(即,esp和ebp的值保持不变),这一个线程当中的所有函数调用都是使用这同一个堆栈。

为什么需要保持堆栈平衡呢?

》因为在Windows当中它的栈默认分配的是1M大小的空间,如果每个函数为局部变量分配的栈空间不回收的话,很快就会用完了。为了重复利用堆栈,所以需要平衡堆栈。

一旦函数调用结束之后,原先函数的栈空间存储的局部变量等内容就变成了垃圾数据了,所以不要使用指针等去勾出来原来函数当中的局部变量的值,因为一旦那块内存当中的数值发生变化,很可能获取到的就是垃圾数据。

指针使用完毕之后一定要置为NULL,new出来的对象一定要delete掉

为什么fastcall速度快呢?

把参数传到寄存器里面:

 一般来说通过寄存器来传参,如果参数比较多就一部分使用寄存器一部分使用push压栈来传参

 在C++当中,类的成员函数的调用是通过thiscall来实现的

this指针是放在ecx寄存器进行传递的

Windows下的函数调用方式:

他们的定义都包含在windef.h头文件当中

上面是MAC,下面是Windows

不定个数的参数一般是cdcall,因为只有调用方才知道传了几个参数进去

在release版本当中,局部变量如果比较简单的话,有可能会被直接优化掉,可以使用scanf来避免这种情况出现。所以如果在ida当中,应该主要关注的是它的变量名,比如arg1这种,而不用管它究竟是多少偏移量,在ida当中,局部变量是var,外面传进来的参数是arg

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

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

相关文章

掌握Scala数据结构(2)MAP、TUPLE、SET

一、映射 (Map) (一)不可变映射 1、创建不可变映射 创建不可变映射mp,用键->值的形式 创建不可变映射mp,用(键, 值)的形式 注意:Map是特质(Scala里的trait,相当于Java里的interface&#…

git选择指定分支中的指定目录进行合并

指定路径合并 先进入branch A : git checkout branchA 将dir2中的变更转移至branchA: git checkout branchB dir2 所有变更将出现在branchA中的dir2中,检查后提交即可。 git commit -m "sync branchB dir2 to branchA" 也可以…

读财报丨第二增长曲线渐显,但涂鸦智能的未来还看PaaS业务?

2022年以来,全球物联网行业持续低迷,赛道内不少玩家出现业绩下滑,而且陆续传出巨头企业关停相关业务板块的消息。这背后是消费电子行业库存积压,客户需求难以释放等宏观因素,导致IoT领域面临一定的经营困境。 近日&am…

STM32——07-STM32定时器Timer

定时器介绍 软件定时 缺点:不精确、占用 CPU 资源 void Delay500ms () //11.0592MHz { unsigned char i , j , k ; _nop_ (); i 4 ; j 129 ; k 119 ; do { do { while ( -- k ); } while ( -- j ); } while ( -- i ); } 定时器工…

108-Spring的底层原理(下篇)

这里续写上一章博客(107章博客): Spring 声明式事务的支持: 编程式事务:在业务代码中添加事务控制代码,这样的事务控制机制就叫做编程式事务 声明式事务:通过xml或者注解配置的方式达到事务…

【Linux】进程间通信(管道)

文章目录 进程通信的目的进程间通信发展进程间通信分类管道System V IPCPOSIX IPC 管道什么是管道管道的读写规则管道的特点:匿名管道处理退出问题命名管道创建一个命名管道匿名管道与命名管道的区别命名管道的打开规则 进程通信的目的 数据传输:一个进程…

应用层协议 —— websocket

websocket介绍 websocket是从HTML5开始支持的一种网页端和服务端保持长连接的消息推送机制。 传统的web程序都是属于“一问一答”的形式,即客户端给服务器发送了一个HTTP请求,服务器给客户端返回一个HTTP响应。这种情况下服务器属于被动的一方&#xff…

前端食堂技术周刊第 86 期:Remix 拥抱 RSC、2023 React 生态系统、从 0 实现 RSC、字节跳动 Mobile DevOps 工程实践

美味值:🌟🌟🌟🌟🌟 口味:椰子水 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 本期摘要 Remix 拥抱 RSCWebContainers 原生支持 npm、yarn 和 pnpm2023 React 生态系…

MySQL InnoDB集群部署及管理全教程

MySQL InnoDB 集群提供完整的高可用性 MySQL 的解决方案。通过使用MySQL Shell附带的AdminAPI,您可以轻松 配置和管理至少三个MySQL服务器的组 实例以充当 InnoDB 集群。 InnoDB 集群中的每个 MySQL 服务器实例都运行 MySQL 组复制,提供复制机制 InnoDB…

LoadRunner 2023 下载和安装

下载 LoadRunner目前最新的版本是2023版,需要到Micro Focus公司的官网注册账号然后申请下载,比较麻烦,这里我把大家常用的社区版本,搬运到阿里云盘上,供下载: https://www.aliyundrive.com/s/WtHSzD4MrXw …

面试了十几家软件测试公司谈谈我最近面试的总结

由于互联网裁员,最近在 bosss 上投了些简历,测试开发岗,看看目前市场情况。 虽然都在说大环境不好,失业的人很多,我最近约面试的还是比较多的,说说最近的体会吧,希望能给大家提供价值。 1、20K…

教你制作一个简单的进销存管理软件,值得收藏!

首先要制作进销存软件,要具体了解进销存到底是什么含义,这三个字分别代表什么流程,在整个进销存管理中的组成。再根据不同的流程制作进销存软件相对应的部分—— 01进销存的定义 “进”——采购 采购是进销存管理的重要组成部分&#xff0…

微信开放平台第三方开发,注册试用小程序,一整套流程

大家好,我是小悟 对服务商来说,试用小程序的好处不言而喻,主打一个先创建后认证的流程。只需要提供小程序名称和openid便可快速注册一个试用小程序,在认证之前,有效期14天,大致流程如下。 注册试用小程序 …

HCIA-RS实验-配置DHCP

什么是DHCP DHCP是动态主机配置协议(Dynamic Host Configuration Protocol)的缩写,它是一种网络协议,用于自动分配IP地址、子网掩码、网关以及DNS服务器等网络参数给计算机,从而简化了网络管理和配置。 DHCP服务器的…

robotframework+python接口自动化的点滴记录

在robotframeworkpython框架上写了两三天的接口自动化,做了一些笔记。 1.在断言的时候经常由于数据类型导致较验不通过,值得注意的是,在定义常量或者变量的时候,使用${}代表int类型,例如${2}就代表数字2,另…

Qt学习09:其他基本小控件

文章首发于我的个人博客:欢迎大佬们来逛逛 文章目录 QSpinBoxQDateTimeEditQComboBoxQSliderQRubberBand QSpinBox 微调框,可以通过点击增加减小或者输入来调整数据。 继承自:QAbstractSpinBox 同时这个类还具有Double类型的版本。 常用操…

搭建Scala开发环境

一、Windows上安装Scala 1、到Scala官网下载Scala Scala2.13.10下载网址:https://www.scala-lang.org/download/2.13.10.html 单击【scala-2.13.10.msi】超链接,将scala安装程序下载到本地 2、安装Scala 双击安装程序图标,进入安装向导&…

笔试强训错题总结(二)

笔试强训错题总结(二) 选择题 下列哪一个是析构函数的特征() A. 析构函数定义只能在类体内 B. 一个类中只能定义一个析构函数 C. 析构函数名与类名不同 D. 析构函数可以有一个或多个参数 析构函数可以在类中声明&#xff0c…

np.arange()用法+reshape+np.dot()

1.np.arange()用法 np.arange()函数返回一个有终点和起点的固定步长的排列 # 参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况 # 1)一个参数时,参数值为终点,起点取默认值0&#xff…

SpringBootSecurity 简单明了

在autoConfiguration Jar的imports文件里面有 SecurityFilterAutoConfiguration类,这样springboot会自己加载这个类。 该类的作用是向容器内部注入一个RegisterBean叫DelegatingFilterProxyRegistrationBean,由于它同时实现了ServletContextInitializer接…