如何还原堆栈跟踪函数名称而不是<UNKNOWN>
?
事件类型:错误
事件来源:abcd
事件类别:无
事件ID:16
日期:2010/1/3
时间:10:24:10 PM
用户:N / A
电脑:CMS01
描述:
Server.exe在2CA001B:77E4BEF7导致in模块
版本6.0.0.334
WorkingSetSize:1291071488字节
EAX = 02CAF420 EBX = 00402C88 ECX = 00000000 EDX = 7C82860C ESI = 02CAF4A8
EDI = 02CAFB68 EBP = 02CAF470 ESP = 02CAF41C EIP = 77E4BEF7 FLG = 00000206
CS = 2CA001B DS = 2CA0023 SS = 7C820023 ES = 2CA0023 FS = 7C82003B GS = 2CA0000
2CA001B:77E4BEF7(0xE06D7363 0x00000001 0x00000003 0x02CAF49C)
2CA001B:006DFAC7(0x02CAF4B8 0x00807F50 0x00760D50 0x007D951C)
2CA001B:006DFC87(0x00003561 0x7F6A0F38 0x008E7290 0x00021A6F)
2CA001B:0067E4C3(0x00003561 0x00000000 0x02CAFBB8 0x02CAFB74)
2CA001B:00674CB2(0x00003561 0x006EBAC7 0x02CAFB68 0x02CAFA64)
2CA001B:00402CA4(0x00003560 0x00000000 0x00000000 0x02CAFBB8)
2CA001B:00402B29(0x00003560 0x00000001 0x02CAFBB8 0x00000000)
2CA001B:00683096(0x00003560 0x563DDDB6 0x00000000 0x02CAFC18)
2CA001B:00688E32(0x02CAFC58 0x7C7BE590 0x00000000 0x00000000)
2CA001B:00689F0C(0x02CAFC58 0x7C7BE590 0x00000000 0x00650930)
2CA001B:0042E8EA(0x7F677648 0x7F677648 0x00CAFD6C 0x02CAFD6C)
2CA001B:004100CA(0x563DDB3E 0x00000000 0x00000000 0x008E7290)
2CA001B:0063AC39(0x7F677648 0x02CAFD94 0x02CAFD88 0x77B5B540)
2CA001B:0064CB51(0x7F660288 0x563DD9FE 0x00000000 0x00000000)
2CA001B:0063A648(0x00000000 0x02CAFFEC 0x77E6482F 0x008E7290)
2CA001B:0063A74D(0x008E7290 0x00000000 0x00000000 0x008E7290)
2CA001B:77E6482F(0x0063A740 0x008E7290 0x00000000 0x00000000)
最佳答案
获得与程序完全相同的版本,对其进行objdump
编码,然后查看该地址的功能。如果符号名称已从可执行文件中删除,则可能会有些困难。
如果程序代码以任何方式都是动态的,则可能必须将其运行到调试器中才能找到函数的地址。
如果程序被故意混淆并且令人讨厌,并且在运行时以某种方式将其函数地址随机化(诸如病毒之类的回避之类的东西,或者有时执行复制保护代码),那么所有的赌注都将关闭。
通常:
找出导致崩溃的原因的最简单方法是,按照必要的步骤在调试器中运行的应用程序实例中重现崩溃。所有其他方法都困难得多。这就是为什么开发人员通常不会花时间尝试解决没有已知方法可重现的错误的原因。