当前位置: 首页 > 编程语言 > C#

在x86中附加VS2010SP1后不久出现自由运行的测试应用程序Share

时间:2023-04-10 12:23:18 C#

在x86模式下运行应用程序,它会运行一段时间,然后重复退出。MyApp.exeManaged(v4.0.30319)'已退出,代码为-1073740791(0xc0000409)。紧随其后的是MyApp.vshost.exe:Managed(v4.0.30319)'已退出,代码为0(0x0)。有时如果它正常运行,它会到达我的断点并检查状态,但是当我按F5继续前进时,应用程序会以相同的方式退出。快速搜索错误代码告诉我这是堆栈缓冲区溢出。我听说这可能是由不正确的非托管互操作代码引起的。我可以从调试器运行OK(F5),但是freerun和attach总是有这个问题。关于如何缩小范围的任何想法?编辑:这是我在另一台机器(WindowsServer2008R2x64)上看到的可能相关的调用堆栈:clr.dll!__crt_debugger_hook()clr.dll!___report_gsfailure()+0xeb字节clr.dll!_DoJITFailFast@0()+0x8字节clr.dll!CrawlFrame::SetCurGSCookie()+0x2e9c4f字节clr.dll!StackFrameIterator::Init()+0x60字节clr.dll!Thread::StackWalkFramesEx()+0x8a字节clr.dll!Thread::StackWalkFrames()+0x87字节clr.dll!CNameSpace::GcScanRoots()+0xd7字节clr.dll!WKS::gc_heap::mark_phase()+0xae字节clr.dll!WKS::gc_heap::gc1()+0x7b字节clr.dll!WKS::gc_heap::garbage_collect()+0x1c1字节clr.dll!WKS::GCHeap::GarbageCollectGeneration()+0xba字节clr.dll!WKS::gc_heap::try_allocate_more_space()+0x1cd0字节clr.dll!WKS::gc_heap::allocate_more_space()+0x13字节clr.dll!WKS::GCHeap::Alloc()+0x507字节clr.dll!Alloc()+0x5a字节clr.dll!SlowAllocateString()+0x41字节clr.dll!UnframedAllocateString()+0x11字节clr.dll!强度ingObject::NewString()+0x26字节clr.dll!Int64ToDecStr()+0x12e字节clr.dll!COMNumber::FormatInt64()+0x17e字节mscorlib.ni.dll!6c60b8e1()[下面的框架可能不正确和/或丢失,没有为mscorlib.ni.dll加载符号]EDIT2应用程序的x64版本似乎没有任何问题,问题仅出现在WindowsSDKntstatus的x86中.h头文件:////MessageId:STATUS_STACK_BUFFER_OVERRUN////MessageText:////系统在此应用程序中检测到基于堆栈的缓冲区溢出。此溢出//可能允许恶意用户获得此应用程序的控制权。//#defineSTATUS_STACK_BUFFER_OVERRUN((NTSTATUS)0xC0000409L)//winnt堆栈分配缓冲区上的缓冲区溢出是臭名昭著的病毒注入载体。Microsoft非常重视消除其代码中的潜在线程。C和C++语言是第一个。托管代码落后,这在托管执行环境中不应该发生。尽管如此,与早期的CLR版本不同,第4版CLR建立在保护之上。它有效,尽管它很少发生。我以前只看过一次关于它的问题。解决这个问题会很困难,尤其是当您的应用程序中的非托管代码没有明显的原因会导致此保护失效时。最好的办法是进行最少的重现并联系Microsoft支持以向他们展示问题所在。结果可能是在找到重现时弄清楚它绊倒的地方。互操作签名是否正确?尝试使用http://clrinterop.codeplex.com/releases/view/14120生成它,然后重试。看起来我应该能够通过在我的代码中注入GC.Collect()调用来缩小范围:GarbageCollectionchecksforGSCookies等。失效链接1:http://7388.info/index.php/article/studio/2010-10-17/354.html失效链接2:http://www.pubsub.com/Investigating-a-GSCookie-Corruption_Windows-NET-Troubleshooting-PInvoke-5wbEHu80dzF,rZ5U5DaVJaE以上是C#学习教程:我在x86中附加了VS2010SP1,附加了VS2010SP1后不久,出现了一个自由运行的测试应用程序。更多关于C#学习教程,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: