pwntools缓冲区溢出与栈没对齐

news/2024/9/21 8:30:51/文章来源:https://www.cnblogs.com/muyiGin/p/18354194

我是ubuntu22.04,遇到了极其诡异的事情:

可真是气死我了,got EOF是在逗我?怎么就EOF了?怎么就到end of file了?

下面请欣赏大佬的讲解:

以下贴上gpt更详细的解答,我这次深刻的记住了栈要16字节对齐(我以前一直以为这只是为了提高效率的,可选可不选,无非慢一点)
当栈没有对齐且试图打开一个 shell 时,提示 “got EOF” 通常与栈未对齐导致程序崩溃或不稳定执行有关。这里是一个更深入的解释:

栈对齐的重要性

在许多系统(特别是 x86_64 架构)中,栈的对齐对函数调用和系统调用的正确执行非常重要。通常,栈必须以 16 字节对齐。这是因为现代处理器在处理对齐数据时性能更好,且某些 SIMD 指令集(如 SSE)要求栈必须是 16 字节对齐的。

栈未对齐的影响

当栈未对齐时,调用某些函数或系统调用可能会导致未定义行为或崩溃。这是因为函数可能依赖于栈上的数据具有正确的对齐方式,如果不满足这个条件,函数执行可能会导致内存访问错误,或者由于无法正确访问所需数据,直接导致程序退出。

EOF 与栈未对齐

在某些情况下,当你试图在一个栈未对齐的环境中打开一个 shell 时,程序可能会崩溃。在 Exploit 开发中,这可能是因为返回到 shellcode 的执行发生了错误。如果程序崩溃并关闭文件描述符或终止了与 shell 的通信,会导致 shell 的标准输入流结束,这时会触发 “EOF”(End of File) 的消息。此时,EOF 并不是你通常意义上的文件结束,而是一个指示通信通道关闭的错误。

解决方法

为避免此类问题,在执行 exploit 时,确保栈的对齐是正确的。通常,在调用 shellcode 前,手动对齐栈,确保它是 16 字节对齐的。例如,在手动编写 shellcode 或构造 ROP 链时,特别注意栈指针的对齐。

这是在进行漏洞利用时需要注意的细节之一,正确处理能够避免不必要的程序崩溃和异常行为。

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

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

相关文章

Elasticsearch 磁盘空间异常:一次成功的故障排除案例分享

故障现象 近日有客户找到我们,说有个 ES 集群节点,磁盘利用率达到了 82% ,而其节点才 63% ,想处理下这个节点,降低节点的磁盘利用率。 起初以为是没有打开自动平衡导致的,经查询,数据还是比较平衡的。利用率较高的是 76 节点,如果 76 节点的分片比其他节点多,好像还比…

039.Vue3入门,异步加载组件,初始时不全部加载,使用时才加载

1.App.vue代码如下:<template><button @click="change">切换组件</button><p></p><keep-alive><component :is="tabComponent"></component></keep-alive> </template><script> impor…

P1270 “访问”美术馆

题意注意:要预留一秒的时间!!!不然你就 80 pts 分了。 小偷要回到大门。思路 定义 \(f_{i, j}\) 表示到在 \(i\) 的子树内拿 \(j\) 幅画。 那么我们可以枚举 \(f_{to, k}\) 表示在儿子结点拿 \(k\),那么总共为 \(f_{u, j + k} = min(f_{u, j + k}, f_{u, j} + f_{to, k} +…

matlab求解非线性规划

目录前言一、非线性规划的标准型二、fmincon函数1.目标函数--function f = fun(x)2.非线性约束函数--[c,ceq] = nonlfun(x)3.设置求解方法--option三、matlab求解非线性规划的实例与可能遇到的问题1.初值问题2.算法问题(1)内点法求解(2)SQP算法求解(3)active set算法求解…

genieacs安装

linux环境:ubuntu18.041. 安装node.js16.14wget https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.xz tar -Jxvf node-v16.14.2-linux-x64.tar.xz sudo mv node-v16.14.2-linux-x64/ /opt/ sudo ln -s /opt/node-v16.14.2-linux-x64/bin/node /usr/local/bin/ …

Scanner的进阶使用——基础计算

通过Scanner,可以将我们输入的数字进行计算从而反映出和以及平均数 1.定义两个变量,分别是输入的整数以及总数的和2.建立一个扫描器3.使用while关键字进行循环,在符合条件下(输入的是数字)可以一直进行计算过程4.设置电脑接收数据5.设置我们输入的次数以及数字的总和6.输出…

jUC中的锁

在JUC中 可以使用synchronized关键字进行加锁 如下所示 Object object = new Object(); synchronized (object){ // TODO }synchronized关键字所加的锁是逐步升级的,顺序是 无锁-> 偏向锁 -> 轻量级锁 -> 重量级锁、随着锁等级的提高,所带来的消耗也会越…

Scanner的进阶使用——数字的输入

1.用Scanner输入数字(整数和小数) 1.定义一个整数变量2.建立扫描器3.使用if4.建立电脑接收数据5.设置else(那么)语法6.关闭Scanner

电磁学 数学储备

以新概念物理的附录为主要参考,总结了电磁学的部分数学基础。A 矢量的乘积和对称性 \[\def\ooint{{\bigcirc}\kern-11.5pt{\int}\kern-6.5pt{\int}} \def\oooint{{\bigcirc}\kern-12.3pt{\int}\kern-7pt{\int}\kern-7pt{\int}} \]矢量的标积 设\(\boldsymbol{A}\)和\(\boldsym…

面试题:64匹马,8个赛道,最少跑几次可以找出前四名?

面试题:64匹马,8个赛道,最少跑几次可以找出前四名? 一、常规非最优解法 均分比赛,高度为4的二叉树。次数为8+4+2+1=15 二、最优解综上,最少10次,最多11次。

华为pura70pro+ vs VIVO x100s pro

华为pura70pro+ vs VIVO x100s pro 简介 最近主力机不是很给力,老是发热卡顿,影响我正常的使用,于是有了换手机的想法。作为数码爱好者,有着使不完的折腾劲,我从三千块多的手机研究到了七八千的手机,从红米到小米,从oppo、vivo到华为等等等等研究了个遍。在五花八门的手…