Sample:
#0024: 0x28 ZEND_ECHO LineNo: 0x0012 Flags: 0x02()
op1 : 01->CONST 000000EC 00000016 03->STRING 01->ref 0002
KeyWord:
Pre-Dekrement
====================================================================
echo "Pre-Dekrement
";
Explanation:
#0024: 0x28 ZEND_ECHO LineNo: 0x0012 Flags: 0x02()
^^^^- Counts Commands
#0024: 0x28 ZEND_ECHO LineNo: 0x0012 Flags: 0x02()
^^^^- Commandopcode & Mnemonic
#0024: 0x28 ZEND_ECHO LineNo: 0x0012 Flags: 0x02()
^^^^- LineNummer in the sourcecode
#0024: 0x28 ZEND_ECHO LineNo: 0x0012 Flags: 0x02()
^^- Flag that masks if 'Result', 'op1', 'op2' are in use
op1 : 01->CONST 000000EC 00000016 03->STRING 01->ref 0002
^^-Type for reading the following data
op1 : 01->CONST 000000EC 00000016 03->STRING 01->ref 0002
^^^^ ^^^^ start offset & Length (in StringSections) for const strings Or StorageID for VAR and TMP_VAR
KeyWord: Pre-Dekrement
op1 : 01->CONST 000000EC 00000016 03->STRING 01->ref 0002
^^-OutputVartype
op1 : 01->CONST 000000EC 00000016 03->STRING 01->ref 0002
^^ is reference to StringSections or normal variable
op1 : 01->CONST 000000EC 00000016 03->STRING 01->ref 0002
^^^^ Don't know maybe type for reference (0002 <= String)
_____________________________________________________________________
SerialiseDate.JSS
{"opcode":40,
"result":[8,-1],
"op1":[1,Pre-Inkrement
],
"op2":[8,-1]
} ^^ if it's '01->ref' the string is used (else it would 000000EC regarding the example); '-1' means empty/not used
Considerations about lose of data:
#1 LineNo: 0x0012 - uncritical
#2 Flags: 0x02() - uncritical already handled care for by this decoder
#3 '00000016' - TODO Check if that parameter is always used (except for Stringlength)
! #4 03->STRING - Type of OutputVar; That maybe important for Decompilation
#5 0002 - uncritical; Probably not really important
#6 (Not in the Sample) 'extended_value(from Flag): 0001 or
'extended_value(from File): 003D'
^^Maybe important for class and object stuff.
Other Limitation so far:
* Doesn't cares for functions and scope attribs. ('Public', 'Private', FunctionNames...)
* Works only for one function!
If there are more functions 'SerialiseDate.JSS' gets overwritten and has in the end only the last functionbody data