问题标签 [stack-smash]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
169 浏览

c - 用可执行文件实现栈粉碎

当我只有可执行文件时,我尝试实现堆栈粉碎。我使用 objdump 来获取此源代码的汇编代码:

在运行时 ./a,out (value)....我需要在这样的地方插入 (value) 我将 NOP 插入堆栈位置并且 (value) 的最后一部分是我的下一条指令的地址。在到达包含 fun() 返回地址的位置之前,我有 40 个字节。

如果我插入 00 则将其视为 (31) ASCII 问题。我如何插入十六进制值。

...我希望阙清楚

objdump -w -Mintel:

0 投票
4 回答
219 浏览

c++ - 如何实现从 _calling_ 函数返回值?

我希望能够强制“双重返回”,即拥有一个强制从其调用函数返回的函数(是的,我知道并不总是有一个真正的调用函数等)显然我希望是能够通过操作堆栈来做到这一点,我认为至少以某种不可移植的机器语言方式是可能的。问题是这是否可以相对干净和便携地完成。

给一段具体的代码来填写,我想写函数

使以下功能

返回,说,1; 并且不执行长计算。假设foo()可以假设它只被具有 bar 签名的函数调用,即 an int(int)(因此明确知道它的调用者返回类型是什么)。

笔记:

  • 请不要告诉我这是多么不好的做法,我是出于好奇而问的。
  • 调用函数(在示例中为bar()不得修改。它不会知道被调用的函数在做什么。(同样在示例中,只能/* magic */修改该位)。
  • 如果有帮助,您可能会假设没有发生内联(可能是一个不切实际的假设)。
0 投票
2 回答
762 浏览

c - 为什么粉碎后没有立即出现“检测到堆栈粉碎”?

我理解“检测到堆栈粉碎”是什么意思。这里已经有很多关于这个的问题。但是我没有找到以下问题的答案。拿 C 代码

当我在 Ubuntu 13.10 中使用 gcc 4.8.1 编译时./buffer 123456789会引发预期的错误stack smashing detected。但为什么没有./buffer 12345678引发错误?我希望每个超过 5 个字符的字符串都应该引发错误。

0 投票
1 回答
455 浏览

node.js - websocket.io 正在引发未定义错误的方法

代码

我收到这个错误

0 投票
1 回答
425 浏览

c - 在文件管理中检测到 c 堆栈粉碎

我的程序有问题。变量是用意大利语写的,对不起!我必须处理足球比赛的处罚阶段。如果在前五个点球中球队打成平局,他们将进行点球大战到最后。

如果程序没有进入最后一个“while”,则程序运行不会出错。否则,在完成 while 循环后,当它转到 buffer.txt 文件中的结果时,它会给我一个堆栈粉碎检测问题。我真的不知道如何处理它,因为它看起来很愚蠢,如果它不进入它就可以了!

0 投票
1 回答
1638 浏览

c - 为什么我会检测到堆栈粉碎?

这是实际的错误信息

我不明白的是:我使用来自 [10] 的用户输入并且我从未超过 10。此外,如果我在 scanf 中删除指针 &,则不会出现错误消息。此外,当我从 [10] 更改为从 [2] 更改为较小的值时,也不会发生错误!呜?!

0 投票
1 回答
499 浏览

c - 如何检测 C 中的运行时堆栈粉碎/缓冲区溢出并使 gdb 能够以正确的消息正常退出。?

缓冲区溢出导致 gdb 以一种不稳定的方式运行,并且没有打印正确的日志。如何使gdb以正确的方式打印日志?

另外,有没有办法在多线程环境中检测运行时堆栈粉碎?

搜索-lmcheck但它不是线程安全的。

0 投票
4 回答
151 浏览

c - 当我访问超出分配的内存时,为什么我没有收到堆栈粉碎错误?

我应该在这里得到堆栈粉碎错误。我没有得到它的原因是什么?

如果可能,请解释或(主题名称或链接对我来说就足够了。)

0 投票
0 回答
177 浏览

ubuntu-14.04 - 如何保护 MyCloud?是不是已经太晚了?

我的笔记本电脑运行的是 Ubuntu 14.04 LTS。我有一个 WMD MyCloud,我正在使用 rsync 对其进行备份。rsync 调用通常以错误结束。

我观察到的一些事情。MyCloud 机器有一个 REST API,我看到有人试图破解它。据我所知,尝试没有成功。

我的备份从我的笔记本电脑到 MyCloud:

通常我会得到:

并且 rsync 进程返回 12。

奇怪的是,如果我使用第二个 -v,该过程通常会成功。为什么会这样?没有第二个 -v 是不是太快了?

我看到的东西让我很担心。同样,这是我笔记本电脑上的输出,运行 rsync 以复制到 MyCloud:

它返回 12。哎呀!

那么,这是否意味着我的笔记本电脑感染了某种东西,大概是 Heartbleed 或类似的东西?

在我的笔记本电脑上:

在 MyCloud 上:

我只是被搞砸了吗?我只需要更新 MyCloud 上的内容吗?我已经用 Ubuntu 笔记本电脑更新了好几次。这不能防止这台机器上的感染吗?

接受任何建议。

0 投票
1 回答
937 浏览

bash - 将“/bin/sh”加载到寄存器中

我正在尝试编写 ASM 代码来生成 shell。

我发现系统调用号__execve是 0x3b 或 59。

我需要作为第一个参数发送,作为第二个参数和第三个参数"/bin/sh"的指针。{"/bin/sh", NULL}NULL

按照 Intel 架构上 x86_64 ASM 的约定——第一个参数写入RDI寄存器,第二个参数写入RSI寄存器,最后一个参数写入RDX寄存器。

这是我的代码:

我使用以下说明来编译和链接代码。

_start函数的GDB转储如下:

如您所见,(bad)说明是由 引起的db "/bin/sh",这个字符串有什么问题?什么是(bad)指令?以后如何调试此类问题?