Re: 张老师,请教一个问题
C/C++本地代码调试
张老师,请教一个问题
HiJack
2014-11-21, 15:40 下午
今天在分析一个dump时,遇到一个奇怪的问题,烦请张老师帮忙看一下。
ExceptionAddress: 08ff0bff (activity!ActivityUIManager::onAnnualCeremonyZhanbaoMsg+0x000000b5)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000001
Parameter[1]: 46a0c575
Attempt to write to address 46a0c575
LAST_CONTROL_TRANSFER: from 08fd973c to 08ff0bff
FOLLOWUP_IP:
activity!ActivityUIManager::onAnnualCeremonyZhanbaoMsg+b5
08ff0bff ff8d4decc645 dec dword ptr [ebp+45C6EC4Dh]
STACK_TEXT:
00d9d928 08fd973c 05da4750 07550678 00d9d990 activity!ActivityUIManager::onAnnualCeremonyZhanbaoMsg+0xb5
00d9d944 08ff3f0a 05da4750 0000000a 09022088 activity!ActivityModule::createInstance+0x31
00d9d95c 01675bcb 05da4750 00e9fd50 05dc8bcc activity!OnLoadMusicAddon+0x1d
这是windbg给出的信息,但我在
onAnnualCeremonyZhanbaoMsg上反汇编,发现
onAnnualCeremonyZhanbaoMsg+0xb5 这个偏移不是一条完整的汇编指令,完整的指令是
439 08ff0bfb e89d69feff call activity!QMap<QString,QVariant>::insert (08fd759d)
439 08ff0c00 8d4dec lea ecx,[ebp-14h]
439 08ff0c03 c645fc03 mov byte ptr [ebp-4],3
也就是说,指令截断了,所以
FOLLOWUP_IP才会显示成
activity!ActivityUIManager::onAnnualCeremonyZhanbaoMsg+b5
08ff0bff ff8d4decc645 dec dword ptr [ebp+45C6EC4Dh]
这是怎么回事,是windbg的bug吗?谢谢张老师
Re: 张老师,请教一个问题
HiJack
2014-11-23, 00:14 上午
没人遇到过吗
Re: 张老师,请教一个问题
格蠹老雷
2014-11-24, 17:13 下午
看起来确实是程序指针指错位了,可能是溢出导致的
Re: 张老师,请教一个问题
HiJack
2014-11-26, 17:08 下午
那是什么溢出导致eip错位呢?感觉不像是覆盖返回地址的溢出
Re: 张老师,请教一个问题
qstesiro
2015-01-02, 15:01 下午
通常能够导致ip不正确都是因为栈损,而栈损一般分三种:
1、错误约定(调用约定不一致);
2、溢出;
3、脏数据(并发访问导致栈数据被破坏);
现在这个情况ip比正常的返回地址少了一个字节,因为从程序来看是一是同一模块所有基本可以排除错误约定问题,你可以看看那个insert函数中是否有溢出或是分析一下程序是对于那个map有并发操作,如果问题可以复现,可以对于通过对于特定的位置下数据断点,看是那部分代码对于栈上的返回地址作过修改;
Re: 张老师,请教一个问题
HiJack
2015-05-11, 11:33 上午
谢谢,又学到东西了
Re: 张老师,请教一个问题
goandgo
2015-05-12, 08:59 上午
学习到新东西了