package Ġcom . example . asm . travel Ċ Ċ import Ġcom . example . asm . travel . utils . Reflect Util Ċ import Ġorg . junit . Test Ċ Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . object web . asm . Class Writer Ċ import Ġorg . object web . asm . Label Ċ import Ġorg . object web . asm . Op codes .* Ċ import Ġorg . object web . asm . util . Check Class Adapter Ċ Ċ class ĠExample UnitTest Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgen HelloWorld By Asm () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcw Ġ= ĠClass Writer ( Class Writer . COMPUTE _ MAX S ) ĊĠĠĠĠĠĠĠ Ġcw . visit ( V 1 _ 8 , ĠACC _ PUBLIC , Ġ" Hello ", Ġnull , Ġ" java / lang / Object ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġmv Ġ= Ġcw . visit Method ( ACC _ PUBLIC Ġ+ ĠACC _ STATIC , Ġ" main ", Ġ" ([ Ljava / lang / String ;) V ", Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġmv . visit Field Insn ( GET STATIC , Ġ" java / lang / System ", Ġ" out ", Ġ" Ljava / io / Print Stream ; ") ĊĠĠĠĠĠĠĠ Ġmv . visit L dc Insn (" Hello , ĠWorld ") ĊĠĠĠĠĠĠĠ Ġmv . visit Method Insn ( IN VOKE VIRTUAL , Ġ" java / io / Print Stream ", Ġ" println ", Ġ"( Ljava / lang / String ;) V ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( RETURN ) ĊĠĠĠĠĠĠĠ Ġmv . visit Max s ( 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit End () ĊĠĠĠĠĠĠĠ Ġcw . visit End () ĊĊĠĠĠĠĠĠĠ ĠReflect Util . call Static Method ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReflect Util . find Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflect Util . load Class (" Hello ", Ġcw . toByteArray ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" main ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray < String >:: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < String >() ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgen Binary Search By Asm () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠClass Writer ( Class Writer . COMPUTE _ FR AMES ) ĊĠĠĠĠĠĠĠ Ġval Ġcw Ġ= ĠCheck Class Adapter ( writer ) ĊĊĠĠĠĠĠĠĠ Ġcw . visit ( V 1 _ 8 , ĠACC _ PUBLIC , Ġ" Hello ", Ġnull , Ġ" java / lang / Object ", Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġmv Ġ= Ġcw . visit Method ( ACC _ PUBLIC Ġ+ ĠACC _ STATIC , Ġ" main ", Ġ" ([ Ljava / lang / String ;) V ", Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġmv . visit Code () ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 5 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Int Insn ( NE WAR R AY , ĠT _ INT ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( DUP ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 0 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( I AST ORE ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( DUP ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( I AST ORE ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( DUP ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 3 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( I AST ORE ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( DUP ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 3 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 5 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( I AST ORE ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( DUP ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 4 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Int Insn ( B IP USH , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( I AST ORE ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( AST ORE , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Field Insn ( GET STATIC , Ġ" java / lang / System ", Ġ" out ", Ġ" Ljava / io / Print Stream ; ") ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( AL O AD , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Method Insn ( IN VOKE STATIC , Ġ" com / example / asm / travel / target / Test ", Ġ" binary Search ", Ġ" ([ II ) I ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġmv . visit Method Insn ( IN VOKE VIRTUAL , Ġ" java / io / Print Stream ", Ġ" println ", Ġ"( I ) V ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġmv . visit Field Insn ( GET STATIC , Ġ" java / lang / System ", Ġ" out ", Ġ" Ljava / io / Print Stream ; ") ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( AL O AD , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 4 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Method Insn ( IN VOKE STATIC , Ġ" com / example / asm / travel / target / Test ", Ġ" binary Search ", Ġ" ([ II ) I ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġmv . visit Method Insn ( IN VOKE VIRTUAL , Ġ" java / io / Print Stream ", Ġ" println ", Ġ"( I ) V ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( RETURN ) ĊĠĠĠĠĠĠĠ Ġmv . visit Max s ( 4 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit End () ĊĊĠĠĠĠĠĠĠ Ġmv Ġ= Ġcw . visit Method ( ACC _ PUBLIC Ġ+ ĠACC _ STATIC , Ġ" binary Search ", Ġ" ([ II ) I ", Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġmv . visit Code () ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( AL O AD , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġl 0 Ġ= ĠLabel () ĊĠĠĠĠĠĠĠ Ġmv . visit Jump Insn ( IF NULL , Ġl 0 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( AL O AD , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ARRAY LENGTH ) ĊĠĠĠĠĠĠĠ Ġval Ġl 1 Ġ= ĠLabel () ĊĠĠĠĠĠĠĠ Ġmv . visit Jump Insn ( IF NE , Ġl 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Label ( l 0 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ M 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( I RETURN ) ĊĠĠĠĠĠĠĠ Ġmv . visit Label ( l 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 0 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( IST ORE , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( AL O AD , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ARRAY LENGTH ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( IS UB ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( IST ORE , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġl 2 Ġ= ĠLabel () ĊĠĠĠĠĠĠĠ Ġmv . visit Label ( l 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġl 3 Ġ= ĠLabel () ĊĠĠĠĠĠĠĠ Ġmv . visit Jump Insn ( IF _ IC MP GT , Ġl 3 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( IS UB ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ID IV ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( I ADD ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( IST ORE , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( AL O AD , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( IAL O AD ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġl 4 Ġ= ĠLabel () ĊĠĠĠĠĠĠĠ Ġmv . visit Jump Insn ( IF _ IC MP NE , Ġl 4 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( I RETURN ) ĊĠĠĠĠĠĠĠ Ġmv . visit Label ( l 4 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( AL O AD , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( IAL O AD ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġl 5 Ġ= ĠLabel () ĊĠĠĠĠĠĠĠ Ġmv . visit Jump Insn ( IF _ IC MP GE , Ġl 5 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( I ADD ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( IST ORE , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġl 6 Ġ= ĠLabel () ĊĠĠĠĠĠĠĠ Ġmv . visit Jump Insn ( GOTO , Ġl 6 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Label ( l 5 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( I LOAD , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( IS UB ) ĊĠĠĠĠĠĠĠ Ġmv . visit Var Insn ( IST ORE , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Label ( l 6 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Jump Insn ( GOTO , Ġl 2 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Label ( l 3 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( ICON ST _ M 1 ) ĊĠĠĠĠĠĠĠ Ġmv . visit Insn ( I RETURN ) ĊĠĠĠĠĠĠĠ Ġmv . visit Max s ( 3 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġmv . visit End () ĊĊĠĠĠĠĠĠĠ Ġcw . visit End () ĊĊĠĠĠĠĠĠĠ ĠReflect Util . call Static Method ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReflect Util . find Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflect Util . load Class (" Hello ", Ġwriter . toByteArray ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" main ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray < String >:: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < String >() ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }