编程技术点滴三(CC++)

    技术2022-05-11  66

    mov ecx,[ebp - 2ch]mov edx,[ecx]and  edx,80000000hneg  edxsbb  edx,edxneg  edx mov  [ebp-38h],edx

    其对应的C代码为:

     var_38=(*var_2c)&0x80000000?1:0

    switch...case语句,在VC6编译器下,比较语句将按照case值由小到大排列,而代码则按照程序员书写的从后到前的顺序汇编:如下面的语句:

     

    switch (var_d8)            {             case   0xff :                {                    var_cc = 0 ;                     for  (;var_cc < 4 ;var_cc ++ )                    {                        var_28[var_cc] = arg_1[var_cc];                        ( & var_28[ 4 ])[var_cc] = arg_1[var_cc]     ^     ( & arg_1[ 4 ])[var_cc];                    }                    p9(var_c8,var_28,arg_2);                     break ;                }             case   0 :                {                    var_cc = 0 ;                     for  (;var_cc < 4 ;var_cc ++ )                    {                        arg_2[var_cc] = var_c8[var_cc];                        ( & arg_2[ 4 ])[var_cc] = ( & var_c8[ 4 ])[var_cc];                    }                     break ;                }                         case   1 :                {                    p9(arg_1,var_c8,arg_2);                     break ;                }            }

    将被汇编成:

     

            cmp     dword ptr [ebp - 0xDC ],  0         je      1_00404D64        cmp     dword ptr [ebp - 0xDC ],  1         je      1_00404DC8        cmp     dword ptr [ebp - 0xDC ],  0xFF         je      1_00404CE2        jmp     1_00404DDF1_00404CE2:        mov     word ptr [ebp - 0xCC ],  0         jmp     1_00404CFF1_00404CED:        mov     ax, [ebp - 0xCC ]        add     ax,  1         mov     [ebp - 0xCC ], ax1_00404CFF:        movsx   ecx, word ptr [ebp - 0xCC ]        cmp     ecx,  4         jge     1_00404D4B        movsx   edx, word ptr [ebp - 0xCC ]        movsx   eax, word ptr [ebp - 0xCC ]        mov     ecx, [ebp + 0xC ]        mov     edx, [ecx + edx * 4 ]        mov     [ebp + eax * 4 - 0x28 ], edx        movsx   eax, word ptr [ebp - 0xCC ]        movsx   ecx, word ptr [ebp - 0xCC ]        mov     edx, [ebp + 0xC ]        mov     esi, [ebp + 0xC ]        mov     eax, [edx + eax * 4 ]        xor     eax, [esi + ecx * 4 + 0x10 ]        movsx   ecx, word ptr [ebp - 0xCC ]        mov     [ebp + ecx * 4 - 0x18 ], eax        jmp     1_00404CED1_00404D4B:        mov     edx, [ebp + 0x10 ]        push    edx        lea     eax, [ebp - 0x28 ]        push    eax        lea     ecx, [ebp - 0xC8 ]        push    ecx        call    1_0040100F                           add     esp,  0xC         jmp     1_00404DDF1_00404D64:        mov     word ptr [ebp - 0xCC ],  0         jmp     1_00404D811_00404D6F:        mov     dx, [ebp - 0xCC ]        add     dx,  1         mov     [ebp - 0xCC ], dx1_00404D81:        movsx   eax, word ptr [ebp - 0xCC ]        cmp     eax,  4         jge     1_00404DC6        movsx   ecx, word ptr [ebp - 0xCC ]        movsx   edx, word ptr [ebp - 0xCC ]        mov     eax, [ebp + 0x10 ]        mov     ecx, [ebp + ecx * 4 - 0xC8 ]        mov     [eax + edx * 4 ], ecx        movsx   edx, word ptr [ebp - 0xCC ]        movsx   eax, word ptr [ebp - 0xCC ]        mov     ecx, [ebp + 0x10 ]        mov     edx, [ebp + edx * 4 - 0xB8 ]        mov     [ecx + eax * 4 + 0x10 ], edx        jmp     1_00404D6F1_00404DC6:        jmp     1_00404DDF1_00404DC8:        mov     eax, [ebp + 0x10 ]        push    eax        lea     ecx, [ebp - 0xC8 ]        push    ecx        mov     edx, [ebp + 0xC ]        push    edx        call    1_0040100F                           add     esp,  0xC 1_00404DDF:        jmp     1_00404C62                   

     

     


    最新回复(0)