; Meaningless program that makes a few hops and then exits

.386
.MODEL FLAT

ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD

              .DATA
jump_anywhere DWORD ?

.CODE
_start:
              mov eax, offset label_three ; prepare address
              jmp eax                     ; register indirect jump
              ;
label_one:
              jmp quit_program            ; unconditional relative jump
              ;
label_two:
              mov eax, offset label_one
              mov jump_anywhere, eax
              jmp jump_anywhere           ; memory indirect jump
              ;
label_three:
              mov edi, offset jump_anywhere
              mov eax, offset label_two
              mov jump_anywhere, eax
              jmp dword ptr [edi]        ; jump via pointer to a variable that contains an address
              ;


quit_program:
              INVOKE  ExitProcess, 0  ; exit with return code 0

PUBLIC _start                   ; make entry point public

END                             ; end of source code