80x86 Assembly / x86 Asm Code Formatting Demo 2


FormatCode Code Formatter is based on serveral powerful syntax parser engines so you can exactly control the appearance of your source code. Here is the code formatting demo of FormatCode 80x86 Assembly / x86 Asm Code Formatter to prove the ability of code formatting functions of FormatCode:

   ;--- Before Code Formatting ---

   YES  EQU 1
   NO     EQU 0
   SET_BP_CODE EQU 1
   CLEAR_BP_CODE   EQU 2
   Enter_OP_CODE  EQU 3

   .486p
   .xlist
   MASM=1

   include   vmm.inc
   include vwin32.inc
   include  shell.inc
   include    ifsmgr.inc
   include      ifs.inc

   .list

   ; Hook interrupts 30

   VXD_Icode_Seg

   BeginProc TRACKIT_Device_Init

   mov eax, 30h
   mov   esi, OFFSET32 Hookint30
   VMMCall Hook_VMM_Fault

   mov eax, 30h
   mov  esi, OFFSET32 Hookint30
   VMMCall Hook_PM_Fault

   clc
   ret
   EndProc TRACKIT_Device_Init

   VXD_Icode_Ends

   VXD_Locked_Code_Seg

   Declare_Virtual_Device  TRACKIT,0,0,TRACKIT_Control,Undefined_Device_ID, \
   Undefined_Init_Order,,

   ; Device control procedure for the VxD

   BeginProc  TRACKIT_Control

   Control_Dispatch SYS_DYNAMIC_DEVICE_INIT,   TRACKIT_Device_Init
   Control_Dispatch SYS_DYNAMIC_DEVICE_EXIT, TRACKIT_Device_Exit
   Control_Dispatch W32_DEVICEIOCONTROL, TRACKIT_ioctl
   clc
   ret

   TRACKIT_Control  ENDP

   ; Get IOcontrol code

   BeginProc      TRACKIT_ioctl

   mov ecx,[esi].dwIoControlCode
   cmp    ecx,SET_BP_CODE
   jz   Set_bpoint

   cmp   ecx,CLEAR_BP_CODE
   jz  Clear_bpoint

   cmp   ecx,Enter_OP_CODE
   jz Enter_OP

   xor  eax, eax
   clc
   ret
   EndProc   TRACKIT_ioctl

   ; Save the code which will be restored

   BeginProc       Set_bpoint
   pushad

   mov	eax,[esi].lpvInBuffer
   mov   eax,[eax]
   mov  bpoint_addr1,eax
   mov     bx,30cdh
   xchg  bx,[eax]
   mov  hook_api1_code,bx

   mov    eax,[esi].lpvInBuffer
   mov  eax,[eax+4]
   mov     bpoint_addr2,eax
   mov   bx,30cdh
   xchg   bx,[eax]
   mov   hook_api2_code,bx

   mov   eax,[esi].lpvInBuffer
   mov  eax,[eax+8]
   mov bpoint_addr3,eax
   mov   bx,30cdh
   xchg   bx,[eax]
   mov        hook_api3_code,bx

   popad
   xor  eax, eax
   clc
   ret
   EndProc   Set_bpoint

   BeginProc  Clear_bpoint
   pushad

   mov eax,bpoint_addr1
   mov   bx,hook_api1_code
   mov [eax],bx

   mov   eax,bpoint_addr2
   mov  bx,hook_api2_code
   mov  [eax],bx

   mov   eax,bpoint_addr3
   mov bx,hook_api3_code
   mov    [eax],bx

   popad
   xor eax,   eax
   clc
   ret
   EndProc Clear_bpoint

   BeginProc Enter_OP
   pushad

   mov	  eax,  [esi].lpvOutBuffer
   mov	ebx,  enter_eip
   mov    [eax],ebx
   mov [esi].cbOutBuffer,4

   popad
   xor eax,   eax
   clc
   ret
   EndProc  Enter_OP

   ; UnHook all interrupts and services hooked

   BeginProc TRACKIT_Device_Exit

   mov eax,  30h
   mov   esi,   OFFSET32 Hookint30
   VMMCall    UnHook_VMM_Fault
   mov eax, 30h
   mov    esi,   OFFSET32 Hookint30
   VMMCall  UnHook_PM_Fault
   clc
   ret

   EndProc  TRACKIT_Device_Exit

   hook_api1_code    dw   0
   hook_api2_code dw   0
   hook_api3_code      dw   0

   call_ret_code dw 0
   bpoint_addr1 dd    0
   bpoint_addr2    dd 0
   bpoint_addr3     dd 0

   call_inapi   db NO
   enter_eip      dd 0h

   BeginProc Hookint30

   ;int 3

   .if    call_inapi==NO

   pushad

   mov esi,[ebp.Client_EIP]
   sub  esi,2
   mov [ebp.Client_EIP],esi

   mov  esi,[ebp.Client_ESP]
   mov  esi,[esi]
   mov bx,30cdh
   xchg  bx,[esi]
   mov    call_ret_code,bx

   mov eax,bpoint_addr1
   mov       bx,hook_api1_code
   mov  [eax],bx

   mov  eax,bpoint_addr2
   mov bx,hook_api2_code
   mov  [eax],bx

   mov eax,bpoint_addr3
   mov       bx,hook_api3_code
   mov [eax],bx

   mov call_inapi,YES

   popad
   clc
   ret

   .else

   pushad

   mov esi,[ebp.Client_EIP]
   sub    esi,2
   mov  [ebp.Client_EIP],esi
   mov bx,call_ret_code
   mov   [esi],bx


   mov  eax,[esi-27h]
   .if    eax==626610ebh
   mov   enter_eip,esi
   sub     enter_eip,27h
   .endif

   mov  eax,[esi-35h]
   .if    eax==0a302e0c1h
   mov   enter_eip,esi
   sub enter_eip,35h
   sub  enter_eip,5h
   .endif

   mov  eax,[esi-29h]
   .if    eax==0a302e0c1h
   mov   enter_eip,esi
   sub enter_eip,29h
   sub      enter_eip,5h
   .endif

   mov eax,[esi-5Dh]
   .if   eax==0a302e0c1h
   mov  enter_eip,esi
   sub     enter_eip,5Dh
   sub enter_eip,5h
   .endif


   mov eax,[esi-0fh]
   and   eax,00ffffffh
   .if  eax==00e80a6ah
   mov     enter_eip,esi
   sub enter_eip,0fh
   .endif

   mov eax,[esi-8]
   cmp   eax,0e8006a50h
   jnz DELPHI1_END

   mov ax,[esi-0ah]
   .if   ah==0c3h || al==0c3h
   mov  ebx,[ebp.Client_ESP]
   mov ebx,[ebx+4]

   mov   esi,0ah
   sub ebx,esi

   .while  esi !=30h
   mov eax,[ebx]
   .if   eax==83ec8b55h || eax==0b9ec8b55h
   mov  enter_eip,ebx
   .break
   .endif
   inc  esi
   dec    ebx
   .endw
   .endif

   DELPHI1_END:

   mov  eax,[esi-0Fh]
   cmp   eax,0e800408dh
   jnz DELPHI2_END

   mov ax,[esi-11h]
   .if  ah==0c3h || al==0c3h
   mov   ebx,[ebp.Client_ESP]
   mov  ebx,[ebx]

   mov esi,0ah
   sub   ebx,esi

   .while  esi !=30h
   mov  eax,[ebx]
   .if    eax==83ec8b55h
   mov       enter_eip,ebx
   .break
   .endif
   inc  esi
   dec     ebx
   .endw
   .endif
   DELPHI2_END:

   mov  ax,[esi]
   .if    ax==0f08bh
   mov   eax,[esi-0dh]
   .if     eax==83ec8b55h
   mov enter_eip,esi
   sub  enter_eip,0dh
   .endif
   .endif

   mov ax,[esi]
   .if   ax==0f08bh
   mov  eax,[esi-2ch]
   .if eax==6aec8b55h
   mov  enter_eip,esi
   sub   enter_eip,2ch
   .endif
   .endif

   mov   eax,[esi]
   .if  eax==0d48ad233h
   mov eax,[esi-2ch]
   .if    eax==6aec8b55h
   mov enter_eip,esi
   sub  enter_eip,2ch
   .endif
   .endif

   mov al,[esi]
   .if   al==0a3h
   mov  eax,[esi-26h]
   .if eax==6aec8b55h
   mov     enter_eip,esi
   sub enter_eip,26h
   sub   enter_eip,6h
   .endif
   .endif

   mov  ax,[esi]
   .if ax==0e850h
   mov  eax,[esi-150h]
   .if   eax==6aec8b55h
   mov enter_eip,esi
   sub   enter_eip,150h
   .endif
   .endif

   mov ax,[esi]
   .if    ax==0e850h
   mov  eax,[esi-12eh]
   .if eax==6aec8b55h
   mov   enter_eip,esi
   sub enter_eip,12eh
   .endif
   .endif

   mov eax,bpoint_addr1
   mov   bx,30cdh
   xchg bx,[eax]
   mov hook_api1_code,bx

   mov eax,bpoint_addr2
   mov   bx,30cdh
   xchg bx,[eax]
   mov hook_api2_code,bx

   mov  eax,bpoint_addr3
   mov bx,30cdh
   xchg  bx,[eax]
   mov  hook_api3_code,bx


   mov call_inapi,NO

   popad
   clc
   ret
   .endif
   EndProc Hookint30

   VXD_LOCKED_CODE_ENDS

   end


   ;--- After Code Formatting ---

   YES             equ 1
   NO              equ 0
   SET_BP_CODE     equ 1
   CLEAR_BP_CODE   equ 2
   Enter_OP_CODE   equ 3

   .486p
   .xlist
   MASM =1

   include vmm.inc
   include vwin32.inc
   include shell.inc
   include ifsmgr.inc
   include ifs.inc

   .list

   ; Hook interrupts 30

   VXD_Icode_Seg

   BeginProc TRACKIT_Device_Init

       mov     EAX, 30h
       mov     ESI, OFFSET32 Hookint30
       VMMCall Hook_VMM_Fault

       mov     EAX, 30h
       mov     ESI, OFFSET32 Hookint30
       VMMCall Hook_PM_Fault

       clc
       ret
   EndProc TRACKIT_Device_Init

   VXD_Icode_Ends

   VXD_Locked_Code_Seg

   Declare_Virtual_Device TRACKIT, 0, 0, TRACKIT_Control, Undefined_Device_ID, \
   Undefined_Init_Order , ,

   ; Device control procedure for the VxD

   BeginProc TRACKIT_Control

       Control_Dispatch SYS_DYNAMIC_DEVICE_INIT, TRACKIT_Device_Init
       Control_Dispatch SYS_DYNAMIC_DEVICE_EXIT, TRACKIT_Device_Exit
       Control_Dispatch W32_DEVICEIOCONTROL, TRACKIT_ioctl
       clc
       ret

   TRACKIT_Control endp

   ; Get IOcontrol code

   BeginProc TRACKIT_ioctl

       mov ECX, [ESI].dwIoControlCode
       cmp ECX, SET_BP_CODE
       jz  Set_bpoint

       cmp ECX, CLEAR_BP_CODE
       jz  Clear_bpoint

       cmp ECX, Enter_OP_CODE
       jz  Enter_OP

       xor EAX, EAX
       clc
       ret
   EndProc TRACKIT_ioctl

   ; Save the code which will be restored

   BeginProc Set_bpoint
       pushad

       mov    EAX,            [ESI].lpvInBuffer
       mov    EAX,            [EAX]
       mov    bpoint_addr1,   EAX
       mov    BX,             30cdh
       xchg   BX,             [EAX]
       mov    hook_api1_code, BX

       mov    EAX,            [ESI].lpvInBuffer
       mov    EAX,            [EAX+4]
       mov    bpoint_addr2,   EAX
       mov    BX,             30cdh
       xchg   BX,             [EAX]
       mov    hook_api2_code, BX

       mov    EAX,            [ESI].lpvInBuffer
       mov    EAX,            [EAX+8]
       mov    bpoint_addr3,   EAX
       mov    BX,             30cdh
       xchg   BX,             [EAX]
       mov    hook_api3_code, BX

       popad
       xor    EAX, EAX
       clc
       ret
   EndProc Set_bpoint

   BeginProc Clear_bpoint
       pushad

       mov    EAX,   bpoint_addr1
       mov    BX,    hook_api1_code
       mov    [EAX], BX

       mov    EAX,   bpoint_addr2
       mov    BX,    hook_api2_code
       mov    [EAX], BX

       mov    EAX,   bpoint_addr3
       mov    BX,    hook_api3_code
       mov    [EAX], BX

       popad
       xor    EAX,   EAX
       clc
       ret
   EndProc Clear_bpoint


   BeginProc Enter_OP
       pushad

       mov    EAX, [ESI].lpvOutBuffer
       mov    EBX, enter_eip
       mov    [EAX], EBX
       mov    [ESI].cbOutBuffer, 4

       popad
       xor    EAX, EAX
       clc
       ret
   EndProc Enter_OP

   ; UnHook all interrupts and services hooked

   BeginProc TRACKIT_Device_Exit

       mov     EAX, 30h
       mov     ESI, OFFSET32 Hookint30
       VMMCall UnHook_VMM_Fault
       mov     EAX, 30h
       mov     ESI, OFFSET32 Hookint30
       VMMCall UnHook_PM_Fault
       clc
       ret

   EndProc TRACKIT_Device_Exit

   hook_api1_code dw 0
   hook_api2_code dw 0
   hook_api3_code dw 0

   call_ret_code dw 0
   bpoint_addr1 dd 0
   bpoint_addr2 dd 0
   bpoint_addr3 dd 0

   call_inapi db NO
   enter_eip dd 0h

   BeginProc Hookint30

                    ;int 3

                    .if    call_inapi==NO

                           pushad

                           mov    ESI, [EBP.Client_EIP]
                           sub    ESI, 2
                           mov    [EBP.Client_EIP], ESI

                           mov    ESI, [EBP.Client_ESP]
                           mov    ESI, [ESI]
                           mov    BX, 30cdh
                           xchg   BX, [ESI]
                           mov    call_ret_code, BX

                           mov    EAX, bpoint_addr1
                           mov    BX, hook_api1_code
                           mov    [EAX], BX

                           mov    EAX, bpoint_addr2
                           mov    BX, hook_api2_code
                           mov    [EAX], BX

                           mov    EAX, bpoint_addr3
                           mov    BX, hook_api3_code
                           mov    [EAX], BX

                           mov    call_inapi, YES

                           popad
                           clc
                           ret

                    .else

                           pushad

                           mov    ESI, [EBP.Client_EIP]
                           sub    ESI, 2
                           mov    [EBP.Client_EIP], ESI
                           mov    BX,  call_ret_code
                           mov    [ESI], BX


                           mov    EAX, [ESI-27h]
                           .if    EAX==626610ebh
                                  mov  enter_eip, ESI
                                  sub  enter_eip, 27h
                           .endif

                           mov    EAX, [ESI-35h]
                           .if    EAX==0a302e0c1h
                                  mov  enter_eip, ESI
                                  sub  enter_eip, 35h
                                  sub  enter_eip, 5h
                           .endif

                           mov    EAX, [ESI-29h]
                           .if    EAX==0a302e0c1h
                                  mov  enter_eip, ESI
                                  sub  enter_eip, 29h
                                  sub  enter_eip, 5h
                           .endif

                           mov    EAX, [ESI-5Dh]
                           .if    EAX==0a302e0c1h
                                  mov  enter_eip, ESI
                                  sub  enter_eip, 5Dh
                                  sub  enter_eip, 5h
                           .endif


                           mov    EAX, [ESI-0fh]
                           and    EAX, 00ffffffh
                           .if    EAX==00e80a6ah
                                  mov  enter_eip, ESI
                                  sub  enter_eip, 0fh
                           .endif

                           mov    EAX, [ESI-8]
                           cmp    EAX, 0e8006a50h
                           jnz    DELPHI1_END

                           mov    AX, [ESI-0ah]
                           .if    AH==0c3h || AL==0c3h
                                  mov    EBX, [EBP.Client_ESP]
                                  mov    EBX, [EBX+4]

                                  mov    ESI, 0ah
                                  sub    EBX, ESI

                                  .while ESI !=30h
                                         mov    EAX, [EBX]
                                         .if    EAX==83ec8b55h || EAX==0b9ec8b55h
                                                mov  enter_eip, EBX
                                                .break
                                         .endif
                                         inc    ESI
                                         dec    EBX
                                  .endw
                           .endif

   DELPHI1_END:

                           mov    EAX, [ESI-0Fh]
                           cmp    EAX, 0e800408dh
                           jnz    DELPHI2_END

                           mov    AX, [ESI-11h]
                           .if    AH==0c3h || AL==0c3h
                                  mov    EBX, [EBP.Client_ESP]
                                  mov    EBX, [EBX]

                                  mov    ESI, 0ah
                                  sub    EBX, ESI

                                  .while ESI  !=30h
                                         mov  EAX, [EBX]
                                         .if  EAX==83ec8b55h
                                              mov    enter_eip, EBX
                                              .break
                                         .endif
                                         inc    ESI
                                         dec    EBX
                                  .endw
                           .endif
   DELPHI2_END:

                           mov    AX, [ESI]
                           .if    AX==0f08bh
                                  mov    EAX, [ESI-0dh]
                                  .if    EAX==83ec8b55h
                                         mov  enter_eip, ESI
                                         sub  enter_eip, 0dh
                                  .endif
                           .endif

                           mov    AX, [ESI]
                           .if    AX==0f08bh
                                  mov    EAX, [ESI-2ch]
                                  .if    EAX==6aec8b55h
                                         mov  enter_eip, ESI
                                         sub  enter_eip, 2ch
                                  .endif
                           .endif

                           mov    EAX, [ESI]
                           .if    EAX==0d48ad233h
                                  mov    EAX, [ESI-2ch]
                                  .if    EAX==6aec8b55h
                                         mov  enter_eip, ESI
                                         sub  enter_eip, 2ch
                                  .endif
                           .endif

                           mov    AL, [ESI]
                           .if    AL==0a3h
                                  mov    EAX, [ESI-26h]
                                  .if    EAX==6aec8b55h
                                         mov  enter_eip, ESI
                                         sub  enter_eip, 26h
                                         sub  enter_eip, 6h
                                  .endif
                           .endif

                           mov    AX, [ESI]
                           .if    AX==0e850h
                                  mov    EAX, [ESI-150h]
                                  .if    EAX==6aec8b55h
                                         mov  enter_eip, ESI
                                         sub  enter_eip, 150h
                                  .endif
                           .endif

                           mov    AX, [ESI]
                           .if    AX==0e850h
                                  mov    EAX, [ESI-12eh]
                                  .if    EAX==6aec8b55h
                                         mov  enter_eip, ESI
                                         sub  enter_eip, 12eh
                                  .endif
                           .endif

                           mov    EAX, bpoint_addr1
                           mov    BX,  30cdh
                           xchg   BX,  [EAX]
                           mov    hook_api1_code, BX

                           mov    EAX, bpoint_addr2
                           mov    BX,  30cdh
                           xchg   BX,  [EAX]
                           mov    hook_api2_code, BX

                           mov    EAX, bpoint_addr3
                           mov    BX,  30cdh
                           xchg   BX,  [EAX]
                           mov    hook_api3_code, BX


                           mov    call_inapi, NO

                           popad
                           clc
                           ret
                    .endif
   EndProc Hookint30

   VXD_LOCKED_CODE_ENDS

   end


Click here to preview the 80x86 Assembly Code Formatting Demo 1.

With FormatCode 80x86 Assembly Code Formatters, you can format any foreign x86 Asm source code to meet your preferred coding style or any common code convention in several seconds!