问题标签 [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.
c - 用可执行文件实现栈粉碎
当我只有可执行文件时,我尝试实现堆栈粉碎。我使用 objdump 来获取此源代码的汇编代码:
在运行时 ./a,out (value)....我需要在这样的地方插入 (value) 我将 NOP 插入堆栈位置并且 (value) 的最后一部分是我的下一条指令的地址。在到达包含 fun() 返回地址的位置之前,我有 40 个字节。
如果我插入 00 则将其视为 (31) ASCII 问题。我如何插入十六进制值。
...我希望阙清楚
objdump -w -Mintel:
c++ - 如何实现从 _calling_ 函数返回值?
我希望能够强制“双重返回”,即拥有一个强制从其调用函数返回的函数(是的,我知道并不总是有一个真正的调用函数等)显然我希望是能够通过操作堆栈来做到这一点,我认为至少以某种不可移植的机器语言方式是可能的。问题是这是否可以相对干净和便携地完成。
给一段具体的代码来填写,我想写函数
使以下功能
返回,说,1
; 并且不执行长计算。假设foo()
可以假设它只被具有 bar 签名的函数调用,即 an int(int)
(因此明确知道它的调用者返回类型是什么)。
笔记:
- 请不要告诉我这是多么不好的做法,我是出于好奇而问的。
- 调用函数(在示例中为
bar()
)不得修改。它不会知道被调用的函数在做什么。(同样在示例中,只能/* magic */
修改该位)。 - 如果有帮助,您可能会假设没有发生内联(可能是一个不切实际的假设)。
c - 为什么粉碎后没有立即出现“检测到堆栈粉碎”?
我理解“检测到堆栈粉碎”是什么意思。这里已经有很多关于这个的问题。但是我没有找到以下问题的答案。拿 C 代码
当我在 Ubuntu 13.10 中使用 gcc 4.8.1 编译时./buffer 123456789
会引发预期的错误stack smashing detected
。但为什么没有./buffer 12345678
引发错误?我希望每个超过 5 个字符的字符串都应该引发错误。
node.js - websocket.io 正在引发未定义错误的方法
代码
我收到这个错误
c - 在文件管理中检测到 c 堆栈粉碎
我的程序有问题。变量是用意大利语写的,对不起!我必须处理足球比赛的处罚阶段。如果在前五个点球中球队打成平局,他们将进行点球大战到最后。
如果程序没有进入最后一个“while”,则程序运行不会出错。否则,在完成 while 循环后,当它转到 buffer.txt 文件中的结果时,它会给我一个堆栈粉碎检测问题。我真的不知道如何处理它,因为它看起来很愚蠢,如果它不进入它就可以了!
c - 为什么我会检测到堆栈粉碎?
这是实际的错误信息
我不明白的是:我使用来自 [10] 的用户输入并且我从未超过 10。此外,如果我在 scanf 中删除指针 &,则不会出现错误消息。此外,当我从 [10] 更改为从 [2] 更改为较小的值时,也不会发生错误!呜?!
c - 如何检测 C 中的运行时堆栈粉碎/缓冲区溢出并使 gdb 能够以正确的消息正常退出。?
缓冲区溢出导致 gdb 以一种不稳定的方式运行,并且没有打印正确的日志。如何使gdb以正确的方式打印日志?
另外,有没有办法在多线程环境中检测运行时堆栈粉碎?
搜索-lmcheck
但它不是线程安全的。
c - 当我访问超出分配的内存时,为什么我没有收到堆栈粉碎错误?
我应该在这里得到堆栈粉碎错误。我没有得到它的原因是什么?
如果可能,请解释或(主题名称或链接对我来说就足够了。)
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 笔记本电脑更新了好几次。这不能防止这台机器上的感染吗?
接受任何建议。
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)
指令?以后如何调试此类问题?