诊断BEX事件:modbus.dll触发0xC0000409栈缓冲区溢出问题
程序崩溃问题排查求助
我用National Instruments的CVI/LabWindows IDE开发了一款程序,原本运行正常。后来引入了自己用Microsoft Visual C++ Express 2008编译的libmodbus动态链接库(dll)实现Modbus功能,整套程序运行数天后就会崩溃,通过事件查看器确认问题出在modbus.dll上。
我编译了更新版本V3.1.10(但dll内部版本号被错误标记为3.1.1.2),程序运行近一个月没崩溃,但现在问题又出现了。我推测问题仅在Modbus主站从这台PC获取数据时触发,也就是modbus.dll里的某些回复函数响应时才会出问题。
事件查看器错误信息
第一条错误
Faulting application name: HyF5674.exe, version: 0.1.16.0, time stamp: 0x647058bb Faulting module name: modbus.dll, version: 3.1.1.2, time stamp: 0x645e1045 Exception code: 0xc0000409 Fault offset: 0x00005c2a Faulting process id: 0x1a70 Faulting application start time: 0x01d98f9fa71ab269 Faulting application path: C:\Program Files (x86)\BBS\HyF5674\HyF5674.exe Faulting module path: C:\Program Files (x86)\BBS\HyF5674\modbus.dll Report Id: a551cd66-3b3d-46d0-a779-870d8c07ad93 Faulting package full name: Faulting package-relative application ID:
第二条错误
Faulting application name: HyF5674.exe, version: 0.1.16.0, time stamp: 0x647058bb Faulting module name: unknown, version: 0.0.0.0, time stamp: 0x00000000 Exception code: 0xc0000005 Fault offset: 0x9b42782d Faulting process id: 0x1a70 Faulting application start time: 0x01d98f9fa71ab269 Faulting application path: C:\Program Files (x86)\BBS\HyF5674\HyF5674.exe Faulting module path: unknown Report Id: d4833275-82d0-4b4f-8184-326f7fed350a Faulting package full name: Faulting package-relative application ID:
信息条目
Fault bucket , type 0 Event Name: BEX Response: Not available Cab Id: 0 Problem signature: P1: HyF5674.exe P2: 0.1.16.0 P3: 647058bb P4: modbus.dll P5: 3.1.1.2 P6: 645e1045 P7: 00005c2a P8: c0000409 P9: 00000015 P10: Attached files: \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER831A.tmp.mdmp \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER8609.tmp.WERInternalMetadata.xml \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER8667.tmp.xml \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER8675.tmp.csv \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER86C4.tmp.txt \\?\C:\Users\benke\AppData\Local\Temp\WER8715.tmp.appcompat.txt \\?\C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_HyF5674.exe_588ac012ed775396d11723c0afcf3145a6f825e7_bca12235_cab_431f876f\memory.hdmp These files may be available here: \\?\C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_HyF5674.exe_588ac012ed775396d11723c0afcf3145a6f825e7_bca12235_cab_431f876f Analysis symbol: Rechecking for solution: 0 Report Id: a551cd66-3b3d-46d0-a779-870d8c07ad93 Report Status: 4 Hashed bucket: Cab Guid: 0
已做排查操作
我使用DbgHelper工具,将偏移地址0x00005c2a输入到“查询dll相对地址”功能中,工具定位到了modbus_report_slave_id函数,但右侧显示“文件和行号不可用,函数modbus_report_slave_id,地址0x00685C2A”。我之前从未调试过dll,不确定这个操作是否正确,希望有人能协助解决此问题。
当前已完成的核心操作:通过DbgHelp定位到触发栈缓冲区溢出的函数为modbus_report_slave_id。
内容的提问来源于stack exchange,提问作者ottelo15
相关产品推荐
相关产品推荐

