这个错误根本原因是
编译器(应该是VC8吧)的一个保护机制引起的问题
加入这个保护机制的编译器在编译时将检测从c运行库连接的代码中如果引用在只读区段的数据,那编译的程序将在启动前检查只读数据是否还是在只读区段中,如果发现所在区段不再为只读,那么将会放弃一些初始化操作,比如关于浮点数的初始化操作,这样就会引发类似与6002 floating point not loaded 这样的错误
具体看下面
.text:0040F618 cmp ds:off_42405C, 0
.text:0040F61F jz short loc_40F63B
.text:0040F621 push offset off_42405C
.text:0040F626 [COLOR="Red"]call __IsNonwritableInCurrentImage ;检测只读区段[/COLOR]
.text:0040F62B test eax, eax
.text:0040F62D pop ecx
.text:0040F62E [COLOR="Red"]jz short loc_40F63B[/COLOR]
.text:0040F630 push [esp+arg_0]
.text:0040F634 [COLOR="Red"] call ds:off_42405C ;_fpmath 如果不只读,跳过这个浮点函数的操作,将导致最后的6002错误[/COLOR]
.text:0040F63A pop ecx
__IsNonwritableInCurrentImage:
.text:00415D90 push ebp
.text:00415D91 mov ebp, esp
.text:00415D93 push 0FFFFFFFEh
.text:00415D95 push offset unk_4302B0
.text:00415D9A push offset __except_handler4
.text:00415D9F mov eax, large fs:0
.text:00415DA5 push eax
.text:00415DA6 sub esp, 8
.text:00415DA9 push ebx
.text:00415DAA push esi
.text:00415DAB push edi
.text:00415DAC mov eax, dword_429DA8
.text:00415DB1 xor [ebp+var_8], eax
.text:00415DB4 xor eax, ebp
.text:00415DB6 push eax
.text:00415DB7 lea eax, [ebp+var_10]
.text:00415DBA mov large fs:0, eax
.text:00415DC0 mov [ebp+var_18], esp
.text:00415DC3 mov [ebp+var_4], 0
.text:00415DCA push offset __ImageBase
.text:00415DCF call __ValidateImageBase
.text:00415DD4 add esp, 4
.text:00415DD7 test eax, eax
.text:00415DD9 jz short loc_415E30
.text:00415DDB mov eax, [ebp+arg_0]
.text:00415DDE sub eax, offset __ImageBase
.text:00415DE3 push eax
.text:00415DE4 push offset __ImageBase
.text:00415DE9 call __FindPESection
.text:00415DEE add esp, 8
.text:00415DF1 test eax, eax
.text:00415DF3 jz short loc_415E30
[COLOR="Red"]; 检测是否只读区段
.text:00415DF5 mov eax, [eax+24h] ;pSecHeader->Characteristics
.text:00415DF8 shr eax, 1Fh
.text:00415DFB not eax
.text:00415DFD and eax, 1[/COLOR]
.text:00415E00 mov [ebp+var_4], 0FFFFFFFEh
.text:00415E07 mov ecx, [ebp+var_10]
.text:00415E0A mov large fs:0, ecx
.text:00415E11 pop ecx
.text:00415E12 pop edi
.text:00415E13 pop esi
.text:00415E14 pop ebx
.text:00415E15 mov esp, ebp
.text:00415E17 pop ebp
.text:00415E18 retn