1
6
包括
并称之为:
\ 260\037是主地址(这里是0x1FB0),按八进制和小尾数顺序排列。 在出现总线错误之前,您应该看到两次Hello打印。诀窍是使用一个调试器(甚至gdb也会这样做)来知道您希望在哪里结束,以及返回地址在哪里。它不会和Linux中的一样! MacOS X for i386(大多数操作系统用于i386,实际上包括Linux和Windows)尤其是<=Leopard不是最安全的操作系统。 编辑:刚意识到我用clang作为编译器。所以你需要适应GCC,但我可以告诉你,它的工作没有什么变化:P。 |
2
11
@joveha's answer
是正确的,对于gcc,您必须使用
但是,另外,您需要禁用
要禁用它,只需使用标志编译
|
3
4
堆栈溢出? 术语 栈溢出 指堆栈大小试图超过当前平台和/或配置允许的最大限制时的情况。您所要做的与堆栈溢出完全没有关系。如果希望看到堆栈溢出,请编写一个无限递归函数,执行它,然后等待它溢出:
(希望编译器不会将尾部递归优化为一个循环。如果是这样的话,就让它变得更复杂一些,无尾递归。) 你要做的似乎是复制臭名昭著的 缓冲区溢出 剥削。虽然所讨论的缓冲区应该在堆栈中分配,但该漏洞从未被称为“堆栈溢出”。为了实际演示该漏洞,仅仅超出某个缓冲区的界限是不够的。整点是在存储的返回地址最初占用的堆栈区域中放置一个预先确定的值,这样当函数完成时,它会“返回”到其他(可能是恶意的)代码,而不是原始的调用代码。 那么,你想做什么?堆栈溢出?还是缓冲区溢出? |
4
3
Mac OS上的编译器已在 stack canary 这给了你中止陷阱。在编译器手册中搜索如何禁用它。
对于GCC,此选项是
另一方面,1字节的溢出肯定不足以触发除编译器堆栈检查之外的任何操作。使用类似12字节的值:) |
Forest Lam · 我应该怎么做才能在这里看到分布式驱动器段? 1 年前 |
Andrew · 我需要帮助为这个问题编写代码 2 年前 |
Gen Tan · 节点-v显示节点的旧版本 2 年前 |
xdavidliu · XCode项目对C++标准的选择没有得到尊重 2 年前 |
Yannick · Ruby(或FFI?)执行Jekyll命令时出错 2 年前 |
FreyGeospatial · 显示Mac终端中隐藏的文件和文件夹 2 年前 |
viedev · SwiftUI:macOS上文本字段中文本过长的问题 2 年前 |