首页
社区
课程
招聘
[第一阶段第三题]解答
发表于: 2008-10-8 16:47 2424

[第一阶段第三题]解答

2008-10-8 16:47
2424
====================================================
1.出错位置,
.text:00413E02 FF 35 C8 A0 42 00                       push    p_trap_____________off_42A0C8
.text:00413E08 E8 3F EF FF FF                          call    __decode_pointer
.text:00413E0D 59                                      pop     ecx
.text:00413E0E FF D0                                   call    eax             ; 0041AE1F

.text:0041AE1F                         __fptrap        proc near               ; DATA XREF: .data:off_42A0B0o
.text:0041AE1F                                                                 ; .data:off_42A0B4o ...
.text:0041AE1F 6A 02                                   push    2
.text:0041AE21 E8 D6 46 FF FF                          call    __amsg_exit
.text:0041AE26 59                                      pop     ecx
.text:0041AE27 C3                                      retn
.text:0041AE27                         __fptrap        endp

====================================================
2. 原因
  表面原因:浮点数函数没初始化
  实质原因:由于".rdata"节属性被加上了可写属性

3. 解决办法
====================================================
__cinit里面
__IsNonwritableInCurrentImage返回了FALSE, 造成FPInit没执行

返回TRUE即可, 实际上'.rdata'节有问题
".rdata"节属性去掉可写属性, 即改成40000040;

====================================================
分析过程
很明显是浮点运算造成的问题, 跟进__snwprintf,
.text:00413CFA 83 F8 65                                cmp     eax, 'e'
.text:00413CFD 0F 8C E8 02 00 00                       jl      loc_413FEB
.text:00413D03 83 F8 67                                cmp     eax, 'g'
.text:00413D06 0F 8E 6B FE FF FF                       jle     _here
继续跟进就发现问题。
解决办法看前面的描述

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
2
结果提交时间 4 小时 47 分钟
结果提交时间长度 = 287 分钟
结果提交次数 = 1
结果提交为根本原因
得分 = [(2880 - 287)/2880]^1/5 x 1.0 x 100 - (1 -1 ) x 5 = 97.92
2008-10-14 15:57
0
游客
登录 | 注册 方可回帖
返回
//