[原创]第1阶段第3题
发表于:
2008-10-9 00:07
2458
.text:00420D20 sub_420D20 proc near
.text:00420D20
.text:00420D20 var_9C = qword ptr -9Ch
.text:00420D20 var_94 = dword ptr -94h
.text:00420D20 Text = word ptr -90h
.text:00420D20 Dst = byte ptr -8Eh
.text:00420D20 var_C = dword ptr -0Ch
.text:00420D20 var_8 = qword ptr -8
.text:00420D20
.text:00420D20 push ebp
.text:00420D21 mov ebp, esp
.text:00420D23 sub esp, 94h
.text:00420D29 mov eax, dword_429DA8
.text:00420D2E xor eax, ebp
.text:00420D30 mov [ebp+var_C], eax
.text:00420D33 mov [ebp+var_94], ecx
.text:00420D39 mov ax, ds:word_425A30
.text:00420D3F mov [ebp+Text], ax
.text:00420D46 push 7Eh ; Size
.text:00420D48 push 0 ; Val
.text:00420D4A lea ecx, [ebp+Dst]
.text:00420D50 push ecx ; Dst
.text:00420D51 call _memset
.text:00420D56 add esp, 0Ch
.text:00420D59 fld ds:dbl_425DC0
.text:00420D5F fstp [ebp+var_8]
.text:00420D62 fld [ebp+var_8]
.text:00420D65 fadd st, st
.text:00420D67 fstp [ebp+var_8]
.text:00420D6A sub esp, 8
.text:00420D6D fld [ebp+var_8]
.text:00420D70 fstp [esp+9Ch+var_9C]
.text:00420D73 push offset aPi2F ; "PI * 2 = %f"
.text:00420D78 push 40h ; Count
.text:00420D7A lea edx, [ebp+Text]
.text:00420D80 push edx ; Dest
.text:00420D81 [COLOR="Red"] call __snwprintf ; 当调用此函数时错误发生[/COLOR]
.text:00420D86 add esp, 14h
.text:00420D89 push 40h ; uType
.text:00420D8B push offset Caption ; "TestFloag"
.text:00420D90 lea eax, [ebp+Text]
.text:00420D96 push eax ; lpText
.text:00420D97 mov ecx, [ebp+var_94]
.text:00420D9D call sub_405C75
.text:00420DA2 mov ecx, [ebp+var_C]
.text:00420DA5 xor ecx, ebp
.text:00420DA7 call sub_40ECBD
.text:00420DAC mov esp, ebp
.text:00420DAE pop ebp
.text:00420DAF retn
.text:00420DAF sub_420D20 endp
原因不知道说的对不对 试着说下看看
正常情况下,处理浮点数需要相关的浮点函数支持,当没有用到浮点数包括浮点数没有被初始化时,编译器将不链接相关浮点处理的库
而此代码中直接以内嵌汇编方式处理来这个浮点数,导致编译器没有检测到有初始化的浮点数,在链接时也就没有链接处理浮点数的一些相关库,导致发生r6002 :floating point support not loaded这个错误
__asm
{
fld ds:dbl_425DC0
fstp [ebp+var_8]
fld [ebp+var_8]
fadd st, st
fstp [ebp+var_8]
fld [ebp+var_8]
fstp [esp+9Ch+var_9C]
} 修正方法:
在输入表添加个_snwprintf(msvcrt.dll中),将
.text:00420D81
call __snwprintf ; 当调用此函数时错误发生
改为
00420D81 E8 3C000000 call [420dc2] ;<jmp.&msvcrt._snwprintf>
00420DC2 - FF25 18B04300 jmp dword ptr [<&msvcrt._snwprintf>] ; msvcrt._snwprintf
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
上传的附件: