注册 登录
编程论坛 VC++/MFC

VC6.0 和 VS2017

rohalloway 发布于 2019-10-12 21:13, 2816 次点击
程序代码:

    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);的注释,
另外,确认汇编代码正确。
2 回复
#2
雪影辰风2020-02-23 14:08
我不是学汇编的,看不懂代码
但是我知道VS的编译比VC的更严格
所以新手都不建议使用VS
#3
prettyboy2502020-04-03 18:29
但是我知道VS的编译比VC的更严格
1