bla*_*k3r 19 .net crash-dumps visual-studio-2008
我的软件最近部署到一位客户,他说该应用程序在启动后立即崩溃.经过一些初步调试后,客户为我提供了远程访问其中一台无法运行该应用程序的计算机. 我发现崩溃并不是我的应用程序特有的.任何依赖于.NET框架的应用程序都会立即崩溃.
方便的是,安装了Visual Studio 2008,因此我在其上创建了一个快速的hello world应用程序,然后单击Debug.该应用程序工作正常.但是,当我试图在visual studio之外的/bin/Debug/HelloWorld.exe目录中执行生成的二进制文件时,它崩溃了.
我试过的东西清单(更新):
我使用WinDbg创建了一个转储文件.对我来说,这并不是一切.
FAULTING_IP: mscorwks!PEImage::GetEntryPointToken+21 79f4ff9d f6401010 test byte ptr [eax+10h],10h
EXCEPTION_RECORD: 0012f710 -- (.exr 0x12f710) ExceptionAddress: 79f4ff9d (mscorwks!PEImage::GetEntryPointToken+0x00000021) ExceptionCode: c0000005 (Access violation) ExceptionFlags: 00000000 NumberParameters: 2 Parameter[0]: 00000000 Parameter[1]: 00000010 Attempt to read from address 00000010
FAULTING_THREAD: 00000b44
PROCESS_NAME: MyProcess.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
DETOURED_IMAGE: 1
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
MANAGED_STACK: !dumpstack -EE OS Thread Id: 0xb44 (0) Current frame: ChildEBP RetAddr Caller,Callee
EXCEPTION_OBJECT: !pe cb10b4 Exception object: 00cb10b4 Exception type: System.ExecutionEngineException Message: <none> InnerException: <none> StackTrace (generated): <none> StackTraceString: <none> HResult: 80131506
MANAGED_OBJECT_NAME: System.ExecutionEngineException
CONTEXT: 0012f72c -- (.cxr 0x12f72c) eax=00000000 ebx=00000000 ecx=00000000 edx=0000000e esi=001a1490 edi=00000001 eip=79f4ff9d esp=0012f9f8 ebp=0012fa1c iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246 mscorwks!PEImage::GetEntryPointToken+0x21: 79f4ff9d f6401010 test byte ptr [eax+10h],10h ds:0023:00000010=?? Resetting default scope
READ_ADDRESS: 00000010
FOLLOWUP_IP: mscorwks!PEImage::GetEntryPointToken+21 79f4ff9d f6401010 test byte ptr [eax+10h],10h
BUGCHECK_STR: APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN
PRIMARY_PROBLEM_CLASS: NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN
DEFAULT_BUCKET_ID: NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN
LAST_CONTROL_TRANSFER: from 79ef02b5 to 79f4ff9d
STACK_TEXT: 79f4ff9d mscorwks!PEImage::GetEntryPointToken+0x21 79ef02b5 mscorwks!PEFile::GetEntryPointToken+0xa0 79eefeaf mscorwks!SystemDomain::ExecuteMainMethod+0xd4 79fb9793 mscorwks!ExecuteEXE+0x59 79fb96df mscorwks!_CorExeMain+0x15c 7900b1b3 mscoree!_CorExeMain+0x2c 7c817077 kernel32!BaseProcessStart+0x23
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: mscorwks!PEImage::GetEntryPointToken+21
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: mscorwks
IMAGE_NAME: mscorwks.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 471ef729
STACK_COMMAND: .cxr 0012F72C ; kb ; dds 12f9f8 ; kb
FAILURE_BUCKET_ID: NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN_80000003_mscorwks.dll!PEImage::GetEntryPointToken
BUCKET_ID: APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN_DETOURED_mscorwks!PEImage::GetEntryPointToken+21
WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/MyProcess_exe/2_4_4_39/4a8a192c/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1
Followup: MachineOwner
Run Code Online (Sandbox Code Playgroud)
编辑1:此错误的事件日志详细信息说它是.NET运行时版本2.0.50727.3053 - 致命执行引擎错误(7A097706)(80131506).
DotNetFatalExecutionErrorScreenshot http://www.blakerobertson.com/storage/perm/dotNetFatalCrash.jpg
编辑2(10-7-09):此问题仍然有效.
编辑3(3-29-10):此更新是为了让每个人都知道我从未成功解决问题.机器的客户对解决问题失去了兴趣并且只是重新成像机器:(.感谢所有的贡献.
基于你的windbg输出,看起来有人在进程启动时将一个DLL注入到进程中,并且注入不是针对已加载的任何版本的mscorwks而设计的.如果这是一个休闲工作站(例如秘书),我会没收MIS/IT来检查恶意软件.如果它是一台坐在服务器房间的机器,我会向客户寻求重新安置到另一台机器.
我不怀疑这会发生在任何其他客户身上,并且在8年的.NET开发中,唯一能够(预期)导致您所描述的行为的事情是尝试在具有较旧版本的系统上运行.NET应用程序安装的框架版本(例如缺少支持,导致大多数Windows版本的标准调试/取消对话框),这不是这个问题.这也与处理器架构,框架版本和SP级别无关,它与任何商业AV软件或任何商业网络安全软件无关.
它显然不是你代码中的东西,我不认为它是你可以为你的客户修复的东西.我知道没有工具或一系列步骤可以用来解决这个问题,而不是让客户重新映像目标机器.在他们这样做之前,再次让MIS/IT对潜在的恶意软件(特别是不会通过公众分发的恶意软件)发出幻想.
相关阅读:http://research.microsoft.com/apps/pubs/default.aspx? id = 68568
祝好运.
听起来你在那里给自己找了一个“有趣”的地方。我不知道,但无论如何,这是我的业力嫖妓建议。
1) 除了Windows分配的常规用户权限之外,还有一组专门针对.NET框架的单独的安全设置。如果您安装了 .NET SDK,请在控制面板中查找“Microsoft .NET Framework 配置”工具(可能位于管理工具下)。查看是否有任何设置与您的开发机器不同。
2) 我猜测您的客户在其工作场所受到 IT 制度的控制。看看您或您的客户是否可以获得该程序可以运行的全新 Windows 安装,然后与他的 IT 团队合作,一次应用他们的一项要求(安全设置、防病毒程序等),直到您的程序停止在职的。一个很好的旧的最后工作状态错误搜寻。当然,这需要他的 IT 部门的配合,所以我希望你的程序对某个地方的高管很重要。
| 归档时间: |
|
| 查看次数: |
16436 次 |
| 最近记录: |