VC6.0 和 VS2017
程序代码:
int addr; char *p = NULL; char b[5]={0}; int k; _asm { mov eax, 0xEEF5EC mov eax, [eax] add eax, 0x80 fld [eax] mov ecx, 0xDA0ED8 fdiv [ecx] mov eax, 0xB42D10 call eax mov ebx, eax mov edi, 0xa8 lea ecx, [edi + edi*2 - 0x195] shl ecx, 6 sub ecx, ebx mov eax, ecx mov addr, eax xor edi, edi } while (TRUE) { _asm { xor edx, edx mov eax, addr mov ebx, eax mov ecx, 0xa div ecx mov addr, eax mul ecx sub eax, ebx neg eax mov ecx, eax add ecx, 0x30 lea esi, b mov[esi + edi], ecx inc edi mov edx, 0 mov ebx, edx mov eax, addr or eax, ebx mov k, eax } if (k == 0) break; } p = &b[0]; _strrev(p); CString s; //s.Format(L"%s", p); AfxMessageBox(p);
代码如上
该代码在VC6.0编译可以正确执行,VS2017编译的版本则会导致程序崩溃。
请问可能的原因是什么? 谢谢!
注:
VS2017下需取消//s.Format(L"%s", p);的注释,
另外,确认汇编代码正确。