Linux 缓冲区溢出环境变量

2024-05-03

我一直在审查不同类型的缓冲区溢出,并遇到了一个我不记得为什么会发生的问题。下面的代码是我尝试执行缓冲区溢出的程序:

#include <stdio.h>

void func(char *buff){  
    char buffer[5];
    strcpy(buffer, buff);
    printf("%s\n", buffer);
}

int main(int argc, char *argv[]){
    func(argv[1]);
    printf("I'm done!\n");
    return 0;
}

程序的核心概念很简单,我只是溢出缓冲区来覆盖返回地址func()。当我给它一个地址时,一切都很好,例如0x0804850c这恰好是<_fini>的程序。当我使用该地址实现溢出时,最终结果是程序“优雅地”退出而不打印I'm done!。我现在遇到的问题是当我尝试将返回地址重定向到位于以下位置的环境变量时0xbfffd89.

位于该特定环境变量中的 shell 代码应该在执行完命令后退出程序hello。然而这种情况并没有发生,程序只是简单地分段错误,仅此而已。 shell 代码已经被证实可以在我之前编写的测试 shell 代码的程序中工作。任何人都知道为什么这不起作用。谢谢


环境变量位于具有读写权限但没有执行权限的内存区域。我很容易地重现了这一点,如下所示:

#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char **argv)
{
void (*function)(void);

        function = (void (*)(void))getenv("PATH");
        function();
        return 0;
}

运行在gdb, 我懂了:

Program received signal SIGSEGV, Segmentation fault.
0x00007fffffffeb51 in ?? ()
(gdb) 

然后我查找地址 0x00007fffffffeb51 如果/proc/PID/maps并发现这样一行:

7ffffffde000-7ffffffff000 rw-p 00000000 00:00 0                          [stack]

有一个-哪里的x通常会找到(执行)位。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 缓冲区溢出环境变量 的相关文章

  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框

随机推荐

  • 如何在 JasperReports 中解码 html 实体

    我有一些用 JasperReports 编写的报告 它们按字面意思显示 html 实体 例如 项目符号点 使用 html 实体文本表示显示 8226 你知道有什么办法吗 In the textField设置markup属性为html 这是如
  • 简化情况下能否保证mqtt消息送达顺序?

    如果只有一个代理 一个发布者 一个主题和干净的会话 在这个简化的情况下 能否保证订阅者端的消息传递顺序与发布者端的发送顺序相同 会受到QoS的影响吗 Section 4 6 http docs oasis open org mqtt mqt
  • IQKeyboardManager 从 UITextField 导航到 UITextView

    IQKeyboardManager在键盘上方的工具栏中提供箭头以从一个跳转UITextField到另一个 但我正在寻找是否可以在混合之间跳转UITextFields and UITextViews 我知道完成此任务的正常程序 但我有兴趣知道
  • 更改 Visual Studio 2013 IDE 中选项卡的字体颜色

    我找不到如何更改 Visual Studio 2013 IDE 中选项卡的字体颜色 环境 gt 字体和颜色没有任何允许这样做的内容 我看不出有什么其他的帮助 我的问题是 所选页面在相对较暗的背景上有粗体黑色字体 我必须睁大眼睛才能看到选择了
  • 导入错误:无法导入名称 urandom

    我正在构建一个新的 Linux 环境 并在 Python 上看到以下错误 python c import random Traceback most recent call last File
  • Flask-httpauth: get_password 装饰器如何为 basic-auth 工作?

    我想知道有没有人用过这个烧瓶延伸 https github com miguelgrinberg flask httpauth简化 http basic auth 基本上我不明白这个example https github com migu
  • Sublime Text 2 将颜色粘贴到 MS Word

    我想将代码粘贴到 Word 文档中 同时保留突出显示的彩色文本 有没有办法做到这一点 您可以安装高亮插件 https github com n1k0 SublimeHighlight然后使用SublimeHighlight copy to
  • JavaScript 中 == 和 === 的区别[重复]

    这个问题在这里已经有答案了 有什么区别 and 在 JavaScript 中 我也见过 and 运营商 还有更多这样的运营商吗 看看这里 http longgoldenears blogspot com 2007 09 triple equ
  • 无法加载标签“s:form”的标签处理程序类“org.apache.struts2.views.jsp.ui.FormTag”

    如果我在 NetbeansIDE 中运行代码 它会显示以下错误 org apache jasper JasperException InvestorConfirm jsp 53 12 PWC6032 无法加载标签处理程序类 org apac
  • 在列表视图中颤动网格视图

    我想构建像 Ios 应用商店这样的设计 如下图所示 我想要实现的是有 5 个顶级类别 每个类别都有显示图像的网格 我这样尝试过 return new Scaffold backgroundColor Colors white appBar
  • 可重用的 Tensorflow 卷积网络

    我想重用来自Tensorflow 专业人士的 MNIST CNN 示例 http www tensorflow org tutorials mnist pros index md 我的图像尺寸为 388px X 191px 只有 2 个输出
  • Spring方法获取给定类型的所有bean

    我试图从一个相同类型的豆子中获取所有豆子FileSystemXmlApplicationContext 我正在使用factory getBeansOfType SomeType class 但我注意到它只返回顶级 bean 是否有任何其他方
  • 关于使用outer()和用户定义函数的简单问题?

    gt fun1 lt function x y x y gt outer seq 1 5 length 5 seq 6 10 length 5 fun1 1 2 3 4 5 1 7 8 9 10 11 2 8 9 10 11 12 3 9
  • F1 2019 UDP解码

    我目前正在为 F1 方向盘开发自己的显示器 F1 2019 由codemasters提供 通过UDP发送数据 该数据存储在字节数组中 我在解码返回的数组时遇到一些问题 问题是我得到了很多信息 但我不知道如何处理它们 我将向您介绍我所尝试过的
  • 如何在 mysql 正则表达式中匹配大写 ÅäÖ

    当我在 MySQL 中进行 REGEXP 比较时 我得到了瑞典字符大写版本的一些奇怪结果 我正在使用 utf8 swedish ci 排序规则 我想查找大写单词 SELECT ster REGEXP BINARY A Z a z 应该返回
  • 不区分大小写的关键字匹配

    我正在编写一种用于解析计算机语言的语法 可以与解析 Eyapp http search cpan org casiano Parse Eyapp 1 182 lib Parse Eyapp pod 这是一个 Perl 包 可以简化常规语言解
  • 优化 SELECT 和 WHERE 子句中的存储函数调用

    我有一个具有以下结构的 SQL 查询 SELECT storedfunc param table field as f FROM table WHERE storedfunc param table field lt value ORDER
  • 如何默认选中collection_check_boxes?

    我试图默认选中这一行 In db t text committed 我尝试过的变体checked true 但也许我忽略了一些事情 这是Gist http gist github com RallyWithGalli c66dee6dfb9
  • Struts 2 - 使用 CKEditor 拦截上传的图像文件

    我有一个CKEditor在网站的不同页面上 所以我将上传内容设置为true以及让它工作的所有配置内容 并且图像上传工作得很好 Send it to the Server 标签 但从这里我想拦截或互动upload函数能够将图像上传到文件夹中
  • Linux 缓冲区溢出环境变量

    我一直在审查不同类型的缓冲区溢出 并遇到了一个我不记得为什么会发生的问题 下面的代码是我尝试执行缓冲区溢出的程序 include