问题标签 [buffer-overrun]

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 投票
3 回答
369 浏览

c++ - 缓冲区溢出抛出返回地址

当我输入方法 A 时,它会导致缓冲区溢出,但当我返回时,它运行良好。我认为 throw 将执行转移到调用者方法,所以它去的地址应该与返回地址相同,但我显然错了。有没有办法在 Visual Studio 调试器中查看抛出的地址?

谢谢

Berkus:这是否意味着上层调用方法的堆栈已损坏?例如,

那么,有可能是方法C的返回地址没问题,但方法B的返回地址损坏,导致缓冲区溢出?我看到的是,如果没有抛出,我的应用程序运行良好,所以我认为方法 A、B 和 C 都有有效的返回地址。

0 投票
1 回答
96 浏览

memory-management - 从缓冲区外部读取是否也算作缓冲区溢出?

我关心的是缓冲区溢出的定义。看起来它只适用于缓冲区外的写入。

但是最近我们发现了一个惊人的错误,当程序试图从合法分配的内存块之外读取并遇到未定义的行为时——要么因访问冲突而崩溃,要么通过网络发送不相关的数据。显然,从缓冲区外部读取也不好。

从缓冲区外部读取是否算作缓冲区溢出?如果不是 - 它怎么能被调用?

0 投票
5 回答
374 浏览

c++ - 如何在一个平台上出现缓冲区溢出而不在另一个平台上溢出?

由于情况模糊,我很犹豫要不要问这个问题,但我想了解这怎么可能。我有一个使用 Visual Studio 2008 开发的 C++ 应用程序。当我在 Windows 7 64 位(或 Vista 32 位)上编译该应用程序时,该应用程序运行良好。当我在 32 位 Windows XP SP3 上编译应用程序时,我收到缓冲区溢出警告并且进程终止。这是使用与 Visual Studio 2008 C++ 编译器相同的版本。为什么我在 XP 上收到缓冲区溢出,但在其他 Windows 平台上却没有?

0 投票
2 回答
121 浏览

c - 3 x 7 编程

我一直在尝试编写 3x 7 技巧。完整代码可在此处获得:https ://codereview.stackexchange.com/questions/9419/programming-of-3-x-7-trick 。

我被困在第5步。

在此处输入图像描述

当我输入该行的值时出现此错误。

在此处输入图像描述

不知道错误是什么。需要一些指导。

第 6 步:在此处输入图像描述

0 投票
2 回答
368 浏览

php - PHP 缓冲区溢出

是否有任何已知点需要注意 PHP 中的缓冲区溢出?目前我从一个表单中获取一个电子邮件地址,运行它preg_match以检查它只是一个地址,mail用它调用函数,并使用PDOStatement::bindValue().

有什么好担心的吗?

0 投票
4 回答
1414 浏览

c++ - 关于 C/C++ 中的函数过小数组大小的警告

当参数被定义为比原型指定的更小的数组时,是否有任何工具(最好在 linux 上)可以发出警告?

例如:

我意识到这不是无效代码,但如果可以发出警告,它可以解决一些常见错误(最近遇到了这些错误之一)。

一些工具(例如,clang 静态检查器)会警告函数是否在同一个文件中并在数组边界之外设置一个值,但我想知道如果 arg 小于原型本身,是否会有任何警告。

我使用过 cppcheck、clang、smatch、splint、gcc 的 -Wextra ......但没有人抱怨这一点。

0 投票
2 回答
3397 浏览

windows - STATUS_STACK_BUFFER_OVERRUN 和 STATUS_STACK_OVERFLOW 有什么区别?

我刚刚发现有一个 STATUS_STACK_BUFFER_OVERRUN 和一个 STATUS_STACK_OVERFLOW。这2个有什么区别?我刚刚发现堆栈溢出(堆栈耗尽)与堆栈缓冲区溢出不同,但要么没有解释,要么我不明白。你能帮我吗?

问候托拜厄斯

0 投票
0 回答
10762 浏览

c++ - 堆栈 cookie 检测代码检测到基于堆栈的缓冲区溢出 - 已修复

所以我对这个用于像素化图像的程序有一些问题。一个问题是我得到一个“围绕变量'pixArray'的堆栈已损坏”,然后,当我在中断后单击继续时,它会在标题中出现错误。

我不确定使用 pastebin 是否可以接受,但我会使用它来写一个“短”的帖子。

编码

正在使用的图像

此外,当它通过时,所有像素化正方形在正方形的左侧和顶部都太短了一个像素。它只是在写入 outFile 时使用原始数据。如果您可以尝试找出发生这种情况的原因,您将获得奖励积分。

最后,平均值似乎没有正确平均,运行程序后您可以通过图像最右侧周围的方块看到。

任何这些问题的帮助将不胜感激。提前致谢!

编辑:我对代码进行了排序,注释掉了使用pixArray的部分,而在注释掉时修复问题的部分位于函数的底部,getAveragesForRGB

编辑2:我现在一切顺利。以防万一有人出于某种原因遇到这个确切的问题这是getAveragesForRGB我所有问题所在的新问题。

0 投票
1 回答
2059 浏览

c# - Buffer overflow protection for stackalloc in .Net

From C# reference for stackalloc:

the use of stackalloc automatically enables buffer overrun detection features in the common language runtime (CLR). If a buffer overrun is detected, the process is terminated as quickly as possible to minimize the chance that malicious code is executed.

Specifically, what kind of protection mechanism is implemented for .NET?
And will it also detect buffer underruns? Against which known attacks is the protection weaker?


For a context, for example for MS C++ compiler the information is available here:
Windows ISV Software Security Defenses:

The Stack Buffer Overrun Detection capability was introduced to the C/C++ compiler in Visual Studio .NET 2002 and has been updated in subsequent versions. /GS is a compiler switch that instructs the compiler to add startup code, and function epilog and prolog code, to generate and check a random number that is placed in a function's stack.

Note that Visual C++ 2005 (and later) also reorders data on the stack to make it harder to predictably corrupt that data. Examples include:
• Moving buffers to higher memory than non-buffers. This step can help protect function pointers that reside on the stack.
• Moving pointer and buffer arguments to lower memory at run time to mitigate various buffer overrun attacks.

0 投票
1 回答
1861 浏览

c++-cli - 退出应用程序时,使用 Marshal::GetFunctionPointerForDelegate 并从非托管代码调用回调会导致缓冲区溢出

我正在使用带有 .NET Framework 3.5 的 Visual Studio 2008 并制作 C++/CLI/.NET Forms 应用程序;游戏的编辑器。除了编辑器之外的所有游戏代码都是纯C++。我已经到了需要从非托管代码调用表单代码中的回调的地步。

我正在使用 GetFunctionPointerForDelegate。

首先,我的 Form 类中有这些:

然后我在 Form 构造函数中设置回调:

所以我存储指针并在非托管代码中,在我的应用程序初始化的早期从不同的线程调用回调:

一切都在我的应用程序中完美运行,直到我关闭应用程序。它总是在调用线程中因缓冲区溢出错误而死,调用堆栈相当无用:

这里的关键是即使回调实际上什么也没做,它也会崩溃。要导致崩溃,我所要做的就是启用调用回调的最后一行代码。禁用该行,没有问题。请记住,崩溃仅在退出时发生,而不是在实际使用回调时发生。

有什么建议可以尝试吗?