====================================================
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
继续跟进就发现问题。
解决办法看前面的描述
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)