format pe console 4.0 include 'win32ax.inc' entry main address_list equ mark_list equ macro @@ [arg] { common @@: macro get_f [mark, num] \{ \local a, b match a b, mark \\{ match =:,a \\\{ if (num>0) num=num-1 else if (num=0) b = $ num=num-1 end if \\\} \\} \} match mark_list,mark_list \{ get_f mark_list \} local a a=$ match any,address_list \{address_list equ address_list,a\} match ,address_list \{address_list equ a\} last_address equ a local args args equ forward match any,args\{args equ args,arg\} match ,args\{args equ arg\} common local b, c match b c, args \{ if (b eqtype :) c else args end if \} } struc @r a { match any, a \{ \local num num=-1 macro get_r [c] \\{ \\common \\local d d equ 0 \\reverse match =0 =c,d last_address \\\{ d equ 1 num=0 \\\} match =1,d \\\{ if num=a . c end if num=num+1 \\\} \\} match address_list,address_list \\{ get_r address_list \\} \} match ,a \{ . @r \} } struc @f arg { match a, arg \{ \local mark, num num = a . mark match any,mark_list\\{mark_list equ mark_list,:mark,num\\} match ,mark_list\\{mark_list equ :mark,num\\} \} match , arg \{ . @f \} } proc main call proc1 call proc2 ret endp proc proc1 @@: nop @@: @@:nop nop @@: nop @@: nop ja @r 0 @@: nop jb @r 1 @@: nop jz @r 3 @@: nop @@: nop @@: nop ret endp proc proc2 @@: nop @@: nop @@: nop @@: nop @@: nop jc @f 1 @@: nop jb @f 2 @@: nop jz @f 3 @@: nop @@: nop @@: @@:nop ret endp