1 рд╕реА: рдЕрд╕реЗрдВрдмрд▓рд░ - рд╕реНрдЯреИрдХреНрдб рдорд╢реАрди 1 рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдмрд╛рдЗрдЯрдХреЛрдб рд▓рд┐рдЦреЗрдВ: рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ


рд╕реНрдЯреИрдХ рдорд╢реАрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡реА рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдПрдХ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?


рдЖрдк рд╕рднреА рдиреЗ, рд╢рд╛рдпрдж, рд╕реБрдирд╛ рд╣реИ рдХрд┐ 1 рд╕реА-рдЙрдкрдирд╛рдо рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВ, 1 рд╕реА рднрд╛рд╖рд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдкрд░реНрдпрд╛рдкреНрдд рдХрдо, рдЙрдмрд╛рдК рдирд╣реАрдВ рд╣реИ, рдЖрджрд┐ред рд╡реЗ рд╕рднреА рд▓рдВрдмреЗ рд╕рдордп рддрдХ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреА рдУрд░ рджреЗрдЦрддреЗ рд╣реИрдВред рддреЛ, рд╕рдЬреНрдЬрдиреЛрдВ, рд╡реЗ рдЧрд▓рдд рд╣реИрдВред 1 рд╕реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдРрд╕реЗ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рддрдХрдиреАрдХ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк 1 рд╕реА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдмрд╛рдЙрд▓ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБ рдФрд░ рд╕рдордЭреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ "рдЕрд╕реЗрдВрдмрд▓рд░" рд╣реИ рдФрд░ рдЖрдЬ рд╣рдо рдЗрд╕ рдкрд░ 1C рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрд┐рдВрдЧ рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗред рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдЖрдУ, рдпрд╣ рдордЬреЗрджрд╛рд░ рд╣реЛрдЧрд╛!


рд╕реНрдЯреИрдХреНрдб рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЗрдВ


рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рддреЗрдЬреА рд╕реЗ рджреБрдирд┐рдпрд╛ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд░рд╣реА рд╣реИрдВред рд░реИрдВрдХреЛрдВ рдореЗрдВ "рдИрдорд╛рдирджрд╛рд░" рджреЗрд╢реА рднрд╛рд╖рд╛рдУрдВ рд╕реЗ, рд╢рд╛рдпрдж, рдХреЗрд╡рд▓ рд╕реА рдмрдиреЗ рд░рд╣реЗ (рдкреНрд▓рд╕рд╕ рдФрд░ рдмрд┐рдирд╛)ред рдпрд╣ рд╣реИ рдЕрдЧрд░ рд╣рдо рдФрджреНрдпреЛрдЧрд┐рдХ рдореБрдЦреНрдпрдзрд╛рд░рд╛ рд▓реЗрддреЗ рд╣реИрдВред рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рднрд╛рд╖рд╛рдУрдВ, рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рдореЗрдВ "рд░рдирдЯрд╛рдЗрдо рдкрд░реНрдпрд╛рд╡рд░рдг" рдпрд╛ "рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди" рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкрд░рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рд▓реЛрд╣реЗ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдФрд░ рдЗрди "рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ" рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рдХреЛ рдвреЗрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ "рд╕реНрдЯреИрдХ" рдХреЗ рд░реВрдк рдореЗрдВ рдЬреНрдЮрд╛рдд рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред


рдЬреЛ рд▓реЛрдЧ рднреВрд▓ рдЧрдП рд╣реИрдВ рдЙрдирдХреЗ рд▓рд┐рдП рд░рд┐рдорд╛рд░реНрдХ


(Stack) "". (, ) - , . . .. . "LIFO" тАФ last in/first out. ( ). тАФ .


Java, Python, C# 1 тАФ . , node.js тАФ , , . 95% , . JIT , , ? :)


, , . , тАФ , -, . , . , тАФ , . Java тАФ . , . , , Java JVM тАФ . ( ) Dalvik. , , . тАФ , . , , , ( ) , , .


1 . тАФ 1, тАФ , 1Script. , .



. 2014 , .


, = 1 + 1; ?


PushConst 1
PushConst 1
Add
LoadVar A

- 1 (2 ), Add.


Add (2 ) . . LoadVar , ( тАФ ).


. , = 1+1+2 :


PushConst 1 ;    
PushConst 1 ;    
Add ;  2    (1   1), ,    
PushConst 2 ;    
Add ;  2    (2   2), ,    
LoadVar A ;    ,    (4)     .

, , , : - - .


, , "-". "" .


- 1


, 1 - , , , . , , - - тАФ . , 1 - . , , epf . v8unpack.



1. , .


epf. , chocolatey


choco install v8unpack --version 3.0.41 --source https://www.myget.org/F/onescript/api/v2

, chocolatey (, , ?) https://github.com/e8tools/v8unpack/releases/download/v.3.0.40/v8unpack.exe exe PATH, .


, 1, , .


v8unpack -P .epf content

content, 1 ( тАФ : https://infostart.ru/public/250142/)


, "<--GUID>.0", "info" "text". "text" , , . content . "" " ". , .



, ? , content


v8unpack -P .epf content

GUID.0 , image, text тАФ - . , , - , ? 1 - image. :



тАФ 1. , . , ? , ! ? , !


?


, -, , , . .


-, , - 1 , . 1-, , . " 1" , . , , , 1. . , ?


. , , , .. . . , 1 . , , ( ) " ", " 1" тАФ , .


, . , . - -, 1 . , .


: , ( , ), , , .


, ?


- 1, . - .


, v8unpack "" "image", .



, , , 1.


""


(). тАФ . (OpCode), . , . . , , . ( ). , , тАФ : .


? 1 128, , . .


""


. - , тАФ , тАФ . " ", . .. - , , / . , / . , .


. , , "". " = 2" 1 . . " - ".


""


1 ( ) . - ( ). , . . "", ( ) , .



-?


. тАФ , тАФ , . 2 1.


2. 0 .


2 2 :


LdConst 0
LdConst 0
Add 0

! : , - , Ld "Load". , .


LdConst , ( , 0 ). , . тАФ .


, 2 ( тАФ )


тАФ . , , , Add 0. 2 1 ( ).


, "" .


, , .


, !


, "Hello World".


"" "" :



" " "" , .


, " "



, "" :


LdConst 0
ArgNum 1
CallLoc 0
End 0

"". , -



?


"" " " v8unpack . 1- . " " "". .



. .


 = 8;
 =  + 2;
 =  - ;

: -, 8 2 "" . 0, тАФ 1. , , . .



08
12


0
1
2

LdVar. , . , :


LineNum 1 ;   
LdVar 0 ;     0 ()
LdConst 0 ;     0 ( 8)
Assign ;  -       , .
LineNum 2 ;   
LdVar 1 ;     1 ()
LdVar 0 ;     0 ()
LdConst 1 ;     1 ( 2)
Add ;  2   ,     (+2)
Assign ;  -       ,  ( = (+2)).
LineNum 3 ;  
LdVar 2 ;   2 ()
LdVar 1 ;   1 ()
LdVar 0 ;   0 ()
Sub; .  2 ,  
Assign;   = (-)
End;   

, , , , . , LineNum? , , , . . , , " , " . , LineNum. , , , .



. -, , . ( ) . :


ArgNum, ( )
CallLoc
CallProc,
CallFunc, ( )
Ret( )
LdRet

. "" . 0.


, LineNum. "" 1 .


LdConst 0;    - 
ArgNum 1;           
CallLoc 0;     0.

, ArgNum. тАФ . , . , .



, ( ), , тАФ - . Assign, . 2 . . LdRet. , , . , Ret, . LdRet тАФ . , . . 1Script "" .



, , . . , . Jmp. , Jmp . . , , 1. - тАФ , .



, , 1 . , " " , тАФ . = , " " . :


 () = ("")  . = 2 

2 : . 1 . , , . , " " .


, . , . 2 тАФ And Or . , , .


, "" , , , .. , .. . ( ). , , , .. , ).


2 : JmpTrue JmpFalse. ( ), , , . , JmpTrue 1 . .. , JmpTrue, , .. 1 (trollface) , 1Script JmpTrue .



? 0 1, 0 1


0: LdVar 0 ;     
1: LdConst 0 ;     1
2: Cmp ;  (     )
3: JmpFalse 6 ;    6,    
4:  IF ;  
5:  IF ;  
6:  тАж ; 

тАФ . тАФ .



3 : "", "тАж " " тАж ". "" , .


"тАж " " ", , . , , . Gte (--) JmpFalse . , "".


" "


. тАФ , Next()


Iter, Next , . , тАж , , 1 , , .


. , , :


 ()

         
        .();
    ; 


, "" 0, "" 1. , , "0", . , ? , :)


? , :


PutTmp ;   
LdTmp ;     

( 0)


LdLoc 0 ;    

, , .


Iter ;          -.
Assign ;   Tmp

, :


0LineNum4.
1PutTmp0
2LdTmp0
3LdLoc0. Var
4Iter0
5Assign0= ()
6LineNum4.
7LdLoc2. Var
8LdTmp0
9Assign0= ()
10LdLoc2. Var
11Next0. , , ( тАФ , тАФ )
12JmpFalse26, . Cmd
13LdLoc1. Var
14LdLoc2. Var
15Assign0= ()
16LdLoc2. Var
17LdUndef0
18Assign0= ()
19LineNum5.
20LdLoc1. Var
21ArgNum0(, ). , . , , ( ) ( )
22CallProc0.< >() ( , .. ). Const,
23LineNum5.
24LineNum6.
25Jmp6. Cmd
26PopTmp11? (, - )
27LdLoc2. Var
28LdUndef0
29Assign0= ()
30LdLoc2. Var
31LdUndef0
32Assign0= ()
33LineNum8.
34End0(, )
35End0(, )
36End0(, )

5. Assign, 2 тАФ . .


:


LdLoc 2 ;      0
LdTmp 0 ;    
Assign;     0
LdLoc 2;   0  
Next;        
JmpFalse 26 ;     -      .

Next. , (0), , , , , . JmpFalse .


, JmpFalse 0 , . 0, 0 тАФ . тАж


- . 19-23 . 25 тАФ Jmp , 26 тАФ .


27- 32-. 0, - 2 . , , тАж , +3 , 0 . , , тАж


, 1Script :


0  :(LineNum     3)
1  :(PushLoc     0)
2  :(PushIterator  0)
3  :(LineNum     3)
4  :(IteratorNext  0)
5  :(JmpFalse   12)
6  :(LoadLoc     1)
7  :(LineNum     4)
8  :(PushLoc     1)
9  :(ArgNum      0)
10 :(ResolveMethodProc  0)
11 :(Jmp         3)
12 :(StopIterator  0)
13 :(PushConst   1)
14 :(Return      0)

15 37. , .. , . , 1Script 1. .



, , , . ? , , . , .


? , , , "" "".


- , 1 . BlckEnd Jmp . , BlckEnd тАФ - . BlckEnd 0.


. "" BlckEnd, .


 // 1
     // 2
         // 3
             2; // BlckEnd 3

.. "" тАФ BlckEnd 0, "" тАФ BlckEnd < >. , " " , , .. "" " ".


-


BeginTry, . .. . , , BlckEnd <> Jmp ;


:


 ()
    
       ;
    
       ;
    ;


0: BeginTry 4 ;    Cmd  
1: LineNum 6 ;    
2:BlckEnd 1 ;    1
3:Jmp 6 ;   
4:LineNum 6 ;  :    
5:EndTry 0 ; (  )
6:LineNum 7 ;  :    
7:End 0 ;  (, )
8:End 0 ;  (, )
9:End 0 ;  (, ) 

. BeginTry , , ( ).


( ), BlckEnd ( 2-3). EndTry.


, , . .



? , ? , "" "". image -, , v8unpack epf.


, .


: . , . , (-) , ? , " " :


 = .();

 .() 
    (.);
;

, , " " "-()". 1 , 1 , !


. "" "" . , "" тАФ . :


LdVar 0-
ArgNum 0()
New 0, 0
Assign
LdVar 0
Iter
,
ArgNum 1,
CallLoc 0
End

"". "". ? , "(())" "". - -. ? тАФ !


(dmpas), , :)


Disclaimer


, , . , , 1 . , . "" . , . . , "" , .



1 рд╕реА рдПрдХ рдЬрдЯрд┐рд▓ рдФрд░ рдмрд╣реБ-рдкрд░рдд рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдмреЗрд╣рдж рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдФрд░ рдЬрд┐рддрдирд╛ рдмреЗрд╣рддрд░ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рдХреБрд╢рд▓ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЬ рд╣рдордиреЗ рдЬрд╛рдВрдЪ рдХреА рдХрд┐ 1 рд╕реА рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рддрдХрдиреАрдХреА рдХреНрд╖рд┐рддрд┐рдЬ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЦреИрд░, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рдирд┐рд░реНрдорд╛рдг рдЦрд┐рд▓реМрдирд╛ рдкрд░ рдЕрдкрдиреЗ рд╣рд╛рде рдорд┐рд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рдмрд╣реБрдд рдордЬреЗрджрд╛рд░ рд╣реИ!


рдореИрдВ рдЖрдкрдХреЛ рд░рдЪрдирд╛рддреНрдордХ рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ!


All Articles