- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习堆栈粉碎,并发现了一个对我来说无法按预期工作的示例。我有以下代码:
#include <stdio.h>
GetInput() {
char buffer[8];
gets(buffer);
puts(buffer);
}
main() {
GetInput();
return 0;
}
当在 GDB 中使用“GetInput()”和“gets(buffer)”处的断点运行代码并在第一个和第二个断点处显示堆栈时,会显示以下内容:stack while running code with break points
查看堆栈,有 20 个字节被压入其中。这 20 个字节应该如下:8 个字节用于缓冲区,4 个字节用于 EBP 的旧值,另外 4 个字节用于返回地址。还有另外 4 个字节,我不确定它来自哪里。有人可以解释一下为什么是 20 个字节而不是 16 个字节吗?
最佳答案
填充
根据所使用的编译器和该编译器的版本,甚至优化标志,由于不同的原因,不同数量的填充可能会被推送到堆栈上的不同位置。您的编译器可能会插入堆栈金丝雀来检测缓冲区溢出。它可能正在尝试改进对齐或缓存行为。它可能只是效率低下并且浪费空间。
没有办法确定,因为每个编译器都是不同的,并且任何规范或 ABI 都没有强制要求局部变量的精确布局。
关于c - 在 C 中尝试堆栈粉碎时堆栈上有额外的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44436727/
Video explaining for those who does not understand 此答案未正确回答,请尝试使用其他解决方案来回答(100 Bounty 已过期) 同样的问题,但解释
我有一个使用线程来从文件中读取一些内容的 Activity 。 问题是,如果用户决定在线程运行时旋转屏幕,应用程序就会崩溃。 我知道我可以使用以下方法阻止屏幕旋转: android:screenOri
我正在上计算机安全课并且正在阅读 http://phrack.org/issues/56/8.html .在 bo3.cpp 中,作者创建了他自己的 VTABLE,并覆盖 VPTR 以指向他的 VTA
我们在 Mesos 0.17 上针对 CDH5 运行 Spark 0.9.1。到目前为止,我们继续使用 CDH 系列的“mr1”版本,以便我们可以运行 filecrush。项目在我们的小文件上。由于各
我知道如何删除文件以使它们无法恢复。但是,如何以导致相同结果的方式从 POSIX 环境中的 MySQL 表中删除行?在继续删除该行之前,我目前正在使用与原始数据长度相同的无效字符串重写所有数据。它有效
我有一个如下所示的 XML 文件:
我正在尝试使用 Tween 和平面几何在 Three.js 中创建玻璃 splinter 效果,但有点迷失。网格/几何体不会随补间更新,如果我在第一次渲染之前调用 shatter(),您可以看到补间正
我正在尝试使用我在 XML 中接收的一些日志数据。 在清理数据以使其成为有效的 XML 之后,我在 SQL Server 中获得了 XML 数据包。 (并从 JSON 包装器等中获取其他属性) 但是现
当我将 slim-rails 添加到 Gemfile 并启动我的应用程序时,它崩溃并出现以下错误: /Users/rado/.rbenv/versions/2.3.1/gemsets/project/
我是一名优秀的程序员,十分优秀!