我想在C函数中引发堆栈下溢,以测试我系统中的安全措施.我可以使用内联汇编程序来完成此操作.但是C会更便携.但是,我无法想到使用C引发堆栈下溢的方法,因为堆栈内存在这方面由语言安全地处理.
那么,有没有办法使用C激发堆栈下溢(不使用内联汇编程序)?
如注释中所述:堆栈下溢意味着使堆栈指针指向堆栈开头下方的地址(堆栈从低到高的架构"下方").
什么可以是C++中的一个简单示例,在从方法调用调用和返回的情况下导致堆栈下溢.我熟悉调用约定,即thiscall,stdcall和cdecl以及它们清理堆栈的方式.具体来说,编译器自动为我生成的代码是否会不会出现堆栈下溢?
什么情况可以让我陷入堆栈下溢的麻烦?
我真的很难解决我正在获得的堆栈下溢问题.我在运行时得到的回溯是:
VerifyError: Error #1024: Stack underflow occurred. at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/onComplete()
这种调试特别困难,因为当我在调试模式下运行时根本不会发生这种情况.它只在编译为发布时才会发生.
有没有人有关于如何调试Stack Underflow的任何提示?对Flash的含义有一个清晰的解释吗?
如果有帮助,当我单击其处理程序进行RPC调用的按钮时会发生此错误,该按钮使用URLLoader,AsyncToken,然后调用与AsyncToken关联的AsyncResponder实例集.由于一些服务器端日志记录以及一些日志记录入侵swf,我知道UrlLoader正在成功执行并获取一个crossdomain.xml文件,正确处理它(即:如果我破坏它,我得到一个安全性错误),并且还成功完成"加载"请求(服务器发送数据).下溢似乎发生在Event.COMPLETE侦听/处理过程中(当然,也是由追踪隐含的).
mxmlc used = from flex_sdk_4.5.0.20967
示例播放器(我尝试了几个)= 10.2.153.1
更新:我的具体问题已经解决了...但我现在离开了问题,因为我想知道如何一般地调试这样的问题,而不仅仅是得到我的具体解决方案.
在我的代码中,我有以下应用程序定义:
<s:Application height="100%" width="100%"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
initialize="InitData();">
Run Code Online (Sandbox Code Playgroud)
请注意,代码已附加到initialize事件中.
InitData()和相关的定义是:
import classes.RpcServerProxy;
public var SP:RpcServerProxy;
public function InitData():void {
SP = new RpcServerProxy("http://192.168.1.102:1234");
}
Run Code Online (Sandbox Code Playgroud)
当我将InitData()调用切换为onCompletion事件而不是initialize(感谢J_A_X!)时,问题完全消失了.似乎发生的事情是Event.COMPLETE事件处理程序(堆栈跟踪中的onComplete)正在使用全局SP对象.关于发布(vs debug)编译的一些内容必须影响SP变量初始化的启动时间.稍后将处理程序移动到onCompletion事件解决了所有问题.
如上所述,我仍然想知道有哪些技巧/工具可用于调试这样的初始化问题.
更新2:
applicationComplete似乎是一个比creationComplete放置应用程序初始化代码更好的事件.请参阅此博客文章以获取一些解释,以及此视频(大约4:25)由Adobe Tech Evangelist提供的简单"应用程序启动"数据初始化示例.
我一直在研究python应用程序,客户端向服务器发送时钟信号,服务器响应音频信号.
我有两个按钮,一个用于启动时钟,另一个用于暂停轨道.
主类
# function I call when I hit the play button
def play(self):
start_song = [250]
global IS_FIRST_PLAY
if IS_FIRST_PLAY:
IS_FIRST_PLAY = False
self.startClock()
if IS_CONNECTED:
client.sendMessage(start_song)
# here I start the clock and send a constant clock signal to the client
def startClock(self):
clock = midi.startClock()
for i in clock:
if IS_CONNECTED:
client.sendMessage(i)
midi.playing = True
# here I pause the track
def pause(self):
stop_song = [252]
if IS_CONNECTED:
client.sendMessage(stop_song)
midi.sendMidiMessage(stop_song)
midi.playing = False
midi.mtClock = [0, …Run Code Online (Sandbox Code Playgroud) 我们正在“仅”使用 WebOb 开发一个实验性 Web 框架。我们正在处理并发请求,这基本上是 WebOb 的一个非常简单的集成。我们在 webfaction.com 上托管我们的应用程序
问题是我们的日志中出现了致命的 Python 错误:
Fatal Python error: XXX block stack underflow
Run Code Online (Sandbox Code Playgroud)
没有其他回溯或信息。它使我们的应用程序崩溃(几分钟后它会自动重新启动)。我们在开发过程中从未遇到过这个问题。
编辑:我已经检查过,我的 python 应用程序内存太高,这可能是一个相关的问题
问题是,当我尝试交叉引用访问日志时,没有任何内容与该访问时间相对应。
正如我所说,没有有关错误的回溯或信息。
所以,我首先搜索了Python中的块堆栈下溢,我发现了这篇非常有趣的文章:http://tech.blog.aknin.name/2010/07/22/pythons-innards-interpreter-stacks/,它解释了什么是块堆栈下溢。
编辑:我还尝试删除所有 .pyc 并重新启动服务器。没有结果
所以,这是我的问题:什么可能导致编译器中的块堆栈下溢?什么“类型”的代码可能会导致这种情况?