函数递归调用栈process

news/2025/1/20 2:02:19/文章来源:https://www.cnblogs.com/betty-123/p/18239154

ret2text

n步过

s步进

EIP所指的位置即为当前程序运行的位置

gdb的栈地址顺序上高下底

s起始地址与ebp为0x18-0x08=0x10=16*b'A'

整数打包为字节

shellcode

我们现在做的很多题目,都是堆栈不可执行,如果要使堆栈可执行,就要用到修改内存属性的函数,这属于比较高级的利用方式,所以我们很少用到shellcode,但是我们还是要了解shellcode的使用。
比如说,堆栈可执行(或者通过修改内存属性,使堆栈可执行,这时候我们就可以将shellcode放入栈中,然后将返回地址指向shellcode,我们就能顺利拿到shell。
shellcode还有很多高级用法,比如说字节限制,变形,绕过检测等等

攻击方式

1.向栈缓冲区注入

2.向bss缓冲区注入shellcode,bss存放全局变量

3.向堆缓存区注入

编译时可自行关闭保护机制

ASLR 每次加载程序地址都不固定

生成shellcode

context.arch="amd64" #指定环境amd64
print(shellcraft.amd64.sh())#生成64位的shell汇编代码
print(asm(shellcraft.sh()))

注意:1.若不指定则默认架构为32位 2. ("A" * 68).encode()等价于 b'A'*68

PIE会打乱bss

字长

递归函数调用栈:

过程

调用

1,caller先压函数参数从右到左的顺序依次压入(参数一,二对应由高到低)

2,caller使用call指令调用callee(操作隐含在call指令中),然后将call指令下一条指令地址压入栈return address.

3.callee会先保存caller即父函数的ebp即(push ebp),然后再保存caller的esp即(mov ebp,esp)

4,再存callee的局部变量(先定义的变量先入栈)

返回

1,return前,会进行leave指令操作即2步(1)callee的esp会移动到callee的ebp,(2)再弹出ebp即(pop ebp),此时ebp的值是caller的ebp,caller的ebp值又回到ebp寄存器 ,同时esp指向return address

2.正式ret执行指令,callee的返回地址弹出到eip寄存器,此时便eip指向了caller的执行处

结论:

调用

ebp原本指向父函数的ebp

字后ebp有重要标记作用

ebp+4处值为callee的返回地址

ebp+8处值为传给calee的第一个参数

ebp-4为calee内的第一个局部变量

1、大端模式:高字节保存在内存的低地址

2、小端模式:高字节保存在内存的高地址

举例:

var = 0x11223344,对于这个变量的最高字节为0x11,最低字节为0x44

(1)大端模式存储(存储地址为16位)

地址 数据

0x0004(高地址) 0x44

0x0003 0x33

0x0002 0x22

0x0001(低地址) 0x11

(2)小端模式存储(存储地址为16位)

地址 数据

0x0004(高地址) 0x11

0x0003 0x22

0x0002 0x33

0x0001(低地址) 0x44

如何记忆?

自大的人眼高手低--其中,自大代表大端序,眼高代表高地址,手低代表低字节

strncpy

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pwntool类型转换

pwntools:类型转换 编码是什么?编码就是把一个字符用一个二进制来表示。 以ASCII编码为例,它规定1个字节8个比特位代表1个字符的编码,也就是"00000000"这么宽,一个一个字节的解读。例如:01000001表示大写字母A,有时我们会“偷懒"的用65这个十进制来表示A…

git-jenkins阶段01 DevOps介绍, 版本控制系统, Git的安装与应用(内容对比,历史记录,恢复,分支)

1.DevOps介绍铁三角 开发 测试 运维老板的想法 产品经理的构造 开发的代码实现 测试的功能测试 运维平台构建 代码的上线开发 测试 变化 代码的更新 运维 稳定 网站能够正常运行下去2. 版本控制系统vcs 记录文件的所有的历史变化 随时…

mysql阶段04 连接工具, 连接方式, 启动关闭mysql

一、mysql连接管理 1.连接工具 1)mysql自带的连接命令 mysql#常见用于连接的参数: -u: 指定用户 mysql -uroot -p: 指定密码 mysql -uroot -p123 -h: 指定连接的主机 mysql -uroot -p123 -h10.0.0.51 -P: 指定端口 mysql -uroot …

OOP4-6次作业

OOP4-6次作业 一.前言: 1.第四次PTA: ①题目理解: 延续前面的四次PTA,只不过在此基础上进行更全面的处理,新增了其他的一些点。例如增加了多选题,的输入方式,这样,也就增加了多选题的输出方式。增加了一些填空题,对其部分正确的判断变成了一个难点,也增加了其输出的难…

第4到6次PTA大作业课后分析与反思 BLOG

前言 第4到6次大作业分为两个部分,第4次大作业是对上三次大作业的最终迭代,第5到第6次是新的大作业,是关于电路的迭代。 设计与分析 第四次大作业题目: 设计实现答题程序,模拟一个小型的测试,要求输入题目信息、试卷信息、答题信息、学生信息、删除题目信息,根据输入题目…

ch2 信息与行为

信息与行为重点(from 裴雷)阿莱悖论(独立性) 冯诺依曼公式 贝叶斯信念 信息搜寻预期收益(大题)理性人 经济理性的两个基本假定是:自利性和极大化原则自利性:在行为选择中个体总是倾向选择对自身最具有优势的选择方案 极大化原则,也可以包括极小化原则,指个体对最大幸福…

关于第四到六次PTA作业总结

一.第四到六次PTA作业的分析 1.第四次PTA作业的分析 (1). 理解题目的需求 在编程之前,准确理解题目需求至关重要。本题中,输入格式和输出格式的细节非常多,包括各种异常情况的处理,这些都需要仔细阅读题目描述,确保理解了每一个细节。在实际操作中,我采取了以下措施: …

WebLogic XMLDecoder反序列化漏洞

有关WebLogic的XMLDecoder反序列化漏洞包括CVE-2017-3506、CVE-2017-10271、CVE-2019-2725、CVE-2019-2729等,其漏洞原理相似,差异主要在于出问题的包、黑名单过滤的标签。目录前言XMLDecoder概述XMLDecoder反序列化漏洞漏洞复现 前言 上篇复现了T3反序列化漏洞,XMLDecoder反…

第四日

4. 从前序与中序遍历序列构造二叉树 题目描述:给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例:输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] 输出: [3,9,20,nul…