0day2安全——笔记3
第二章
函数调用约定
不同的操作系统,语言和编译器调用函数的原理差不多,但是具体的调用约定有差异。
C语言VC++编译的函数传参顺序如下图所示(默认使用__stdcall调用约定)
函数调用步骤(__stdcall约定)
1. 参数入栈:将参数从右向左依次压入系统栈中
2. 返回地址入栈:将当期代码区调用指令的下一条指令地址压入栈中,供函数返回时继续执行
3. 代码区跳转:处理器从当前代码区跳转到被调用函数的入口处
4. 栈帧调整:
- 保存当前栈帧状态值:已被后面回复本栈帧使用(EBP入栈)
- 将当前栈帧切换到新栈帧(将ESP值装入EBP,更新栈帧底部)
- 给新栈帧分配空间(把ESP减去所需要空间的大小,抬高栈帧)
ASM
push 参数3 ;从右到左依次传参
push 参数2
push 参数1
call 函数地址 ;1.向栈中压入当前指令在内存中的位置,即保存返回地址
;2.跳转到所调用函数的入口地址
push ebp ;保存旧栈帧的底部
mov ebp,esp ;设置新栈帧的底部(栈帧切换)
sub esp,xxx ;设置新栈帧的顶部(抬高栈帧,为新栈帧开辟空间)
函数调用时系统栈发生的变化
函数返回步骤(__stdcall约定)
1. 保存返回值:通常将函数的返回值保存在寄存器EAX(累加寄存器)中
2. 弹出当前栈帧,恢复上一个栈帧
- 在堆栈平衡的基础上,给ESP加上栈帧的大小,降低栈顶,回收当前栈帧的空间
- 将当期栈帧底部保存的前栈帧ESP值弹如EBP寄存器,恢复出上一个栈帧
- 将函数返回地址弹给EIP(指令寄存器)
ASM
add esp,xxx ;降低栈顶,回收当前栈帧
pop ebp ;将上一个栈帧底部位置恢复到ebp
retn ;1.弹出当前栈帧元素,即弹出栈帧中的返回地址,至此栈帧的恢复工作完成
;2.让处理器跳转到弹出的返回地址,恢复到调用前的代码区
0day2安全——笔记3的更多相关文章
- 0day2安全——笔记4(修改临界变量)
第二章 修改临界变量 #include <stdio.h> #include <string.h> #define PASSWORD "1234567" i ...
- 0day2安全——笔记2
第二章 内存的不同用途 windows应用—>编译连接—>PE文件—>进程 进程使用的内存 1.代码区:储存着被装入执行的二进制机器代码,处理器会到这个区域取指和执行 2.数据区:用 ...
- 0day2安全——笔记1
第一章 PE和内存之间的映射 节偏移 文件偏移地址(File Offset Address):数据在PE文件中的地址 装载地址(Image Base):PE装入内存的基地址 虚拟内存地址(Virtua ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- NET Core-学习笔记(三)
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
随机推荐
- java bean 属性验证框架 valid
项目介绍 java 开发中,参数校验是非常常见的需求. 但是 hibernate-validator 在使用过程中,依然会存在一些问题. 特性 支持 fluent-validation 支持 jsr- ...
- 如何让create-react-app锦上添花,满足实际需求?
目录 前端部分 后端部分 create-react-app 是 React 官方为我们提供的一个单页应用脚手架,基于 webpack 配置了相关功能,babel. 图片处理.热加载.css 模块化.c ...
- 搭建mount+nfs远程挂载
需求背景: 192.168.10.100 源服务器 目录:/root/test 目录属主属组普通用户,权限777 192.168.10.111 目标服务器 目录:/root/test111 目录属主属 ...
- java类成员的默认可访问性是什么?你猜
先看下面TestModel: import org.apache.commons.collections4.BidiMap; import org.apache.commons.collections ...
- 表单生成器(Form Builder)之mongodb表单数据查询——返回分页数据和总条数
上一篇笔记将开始定义的存储结构处理了一下,将FormItems数组中的表单项都拿到mongodb document的最外层,和以前的关系型数据类似,之不过好多列都是动态的,不固定,不过这并没有什么影响 ...
- 2019/12/12学习内容摘要(Linux系统用户与用户组管理②)
5.命令 chfn 用于修改用户的finger (finger为 /etc/passwd 文件第五个字段中显示的信息) 三,用户密码管理 1.命令passwd 格式 passwd [username ...
- VMware Workstation下载-安装-破解-秘钥
永不过期序列号:UZ792-DHF8J-M81XP-MGM5T-MCAF2 Vmware15注册机下载:链接: https://pan.baidu.com/s/1KbLq71tw_5pUKv2lRjF ...
- 如何解决Sublime text3文件名称中文乱码问题
在sublime text 3中,Preference, Settings-User,最后加上一行 "dpi_scale": 1.0 { "auto_complete_t ...
- (绿色)修正版gooflow流程解决方案(源码分享+在线演示+UI地址下载)
gooflow出现挖矿机木马,请勿随意去其他网站下载!!! 一.功能简介 gooflow功能清单1.自定义流程绘制2.自定义属性添加3.支持3种步骤类型普通审批步骤自动决策步骤手动决策步骤 4.决策方 ...
- 从壹开始[做贡献]之二 || 推荐VSCode多语言开发,支持一键JAVA
缘起 哈喽大家周一好!好久不见鸭,最近在看一本书,很好,<人类简史>,适合夏日星空,仰观宇宙之大