mirror of
https://github.com/HyperDbg/HyperDbg.git
synced 2026-08-31 10:07:02 +00:00
script engine for added
This commit is contained in:
parent
d55506e771
commit
db37463331
10 changed files with 829 additions and 476 deletions
|
|
@ -8,9 +8,10 @@
|
|||
|
||||
.VarArgFunc1->printf
|
||||
|
||||
.Operators->or xor and asr asl add sub mul div mod gt lt egt elt eq neq
|
||||
.OperatorsTwoOperand->or xor and asr asl add sub mul div mod gt lt egt elt eq neq
|
||||
.OperatorsOneOperand->inc dec
|
||||
|
||||
.SemantiRules->start_of_if jmp jz jnz jmp_to_end_and_jzcompleted end_of_if start_of_while end_of_while vargstart mov start_of_do_while end_of_do_while
|
||||
.SemantiRules->start_of_if jmp jz jnz jmp_to_end_and_jzcompleted end_of_if start_of_while end_of_while vargstart mov start_of_do_while end_of_do_while start_of_for for_inc_dec start_of_for_ommands end_of_if
|
||||
|
||||
.Registers->rax rcx rdx rbx rsp rbp rsi rdi r8 r9 r10 r11 r12 r13 r14 r15 ds es fs gs cs ss rflags rip idtr gdtr cr0 cr2 cr3 cr4 cr8
|
||||
|
||||
|
|
@ -22,6 +23,7 @@ S->eps
|
|||
STATEMENT->IF_STATEMENT
|
||||
STATEMENT->WHILE_STATEMENT
|
||||
STATEMENT->DO_WHILE_STATEMENT
|
||||
STATEMENT->FOR_STATEMENT
|
||||
STATEMENT->ASSIGN_STATEMENT ;
|
||||
STATEMENT->CALL_FUNC_STATEMENT ;
|
||||
|
||||
|
|
@ -43,6 +45,19 @@ END_OF_IF->eps
|
|||
WHILE_STATEMENT->while @START_OF_WHILE ( BOOLEAN_EXPRESSION ) @JZ { S @END_OF_WHILE }
|
||||
DO_WHILE_STATEMENT->do @START_OF_DO_WHILE { S } while ( BOOLEAN_EXPRESSION ) @END_OF_DO_WHILE ;
|
||||
|
||||
FOR_STATEMENT->for ( SIMPLE_ASSIGNMENT ; @START_OF_FOR BOOLEAN_EXPRESSION ; @FOR_INC_DEC INC_DEC ) { @START_OF_FOR_COMMANDS S @END_OF_FOR }
|
||||
SIMPLE_ASSIGNMENT->L_VALUE = EXPRESSION @MOV SIMPLE_ASSIGNMENT'
|
||||
SIMPLE_ASSIGNMENT->eps
|
||||
SIMPLE_ASSIGNMENT'->eps
|
||||
|
||||
|
||||
INC_DEC->L_VALUE INC_DEC'
|
||||
INC_DEC'->++ @INC INC'
|
||||
INC_DEC'->-- @DEC DEC'
|
||||
INC'->eps
|
||||
DEC'->eps
|
||||
INC_DEC'->eps
|
||||
|
||||
BOOLEAN_EXPRESSION->eps
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ class LALR1Parser:
|
|||
# maximum of "Right Hand Side(Rhs)" length
|
||||
self.MAXIMUM_RHS_LEN = 0
|
||||
|
||||
self.SPECIAL_TOKENS = ['%', '+', '-', "*", "/", "=", "==", "!=", ",", ";", "(", ")", "{", "}", "|", "||", ">>", ">=", "<<", "<=", "&", "&&", "^"]
|
||||
self.SPECIAL_TOKENS = ['%', '+', '++', '-', '--', "*", "/", "=", "==", "!=", ",", ";", "(", ")", "{", "}", "|", "||", ">>", ">=", "<<", "<=", "&", "&&", "^"]
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -46,13 +46,14 @@ class LL1Parser:
|
|||
self.MAXIMUM_RHS_LEN = 0
|
||||
|
||||
|
||||
self.SPECIAL_TOKENS = ['%', '+', '-', "*", "/", "=", "==", "!=", ",", ";", "(", ")", "{", "}", "|", "||", ">>", ">=", "<<", "<=", "&", "&&", "^"]
|
||||
self.SPECIAL_TOKENS = ['%', '+', '++', '-', '--', "*", "/", "=", "==", "!=", ",", ";", "(", ")", "{", "}", "|", "||", ">>", ">=", "<<", "<=", "&", "&&", "^"]
|
||||
|
||||
# INVALID rule indicator
|
||||
self.INVALID = -99
|
||||
|
||||
self.FunctionsDict = dict()
|
||||
self.OperatorsList = []
|
||||
self.OperatorsTwoOperand = []
|
||||
self.OperatorsOneOperand = []
|
||||
self.RegistersList = []
|
||||
self.PseudoRegistersList = []
|
||||
self.keywordList = []
|
||||
|
|
@ -105,10 +106,11 @@ class LL1Parser:
|
|||
self.HeaderFile.write("#define START_VARIABLE " + "\"" + self.Start +"\"\n")
|
||||
self.HeaderFile.write("#define MAX_RHS_LEN " + str(self.MAXIMUM_RHS_LEN) +"\n")
|
||||
self.HeaderFile.write("#define KEYWORD_LIST_LENGTH " + str(len(self.keywordList)) +"\n")
|
||||
self.HeaderFile.write("#define OPERATORS_LIST_LENGTH " + str(len(self.OperatorsList)) + "\n")
|
||||
self.HeaderFile.write("#define OPERATORS_ONE_OPERAND_LIST_LENGTH " + str(len(self.OperatorsOneOperand)) + "\n")
|
||||
self.HeaderFile.write("#define OPERATORS_TWO_OPERAND_LIST_LENGTH " + str(len(self.OperatorsTwoOperand)) + "\n")
|
||||
self.HeaderFile.write("#define REGISTER_MAP_LIST_LENGTH " + str(len(self.RegistersList))+ "\n")
|
||||
self.HeaderFile.write("#define PSEUDO_REGISTER_MAP_LIST_LENGTH " + str(len(self.PseudoRegistersList))+ "\n")
|
||||
self.HeaderFile.write("#define SEMANTIC_RULES_MAP_LIST_LENGTH " + str(len(self.keywordList) + len(self.OperatorsList) + len(self.SemantiRulesList))+ "\n")
|
||||
self.HeaderFile.write("#define SEMANTIC_RULES_MAP_LIST_LENGTH " + str(len(self.keywordList) + len(self.OperatorsOneOperand) + len(self.OperatorsTwoOperand) + len(self.SemantiRulesList))+ "\n")
|
||||
for Key in self.FunctionsDict:
|
||||
self.HeaderFile.write("#define "+ Key[1:].upper() + "_LENGTH "+ str(len(self.FunctionsDict[Key]))+"\n")
|
||||
|
||||
|
|
@ -342,8 +344,11 @@ class LL1Parser:
|
|||
elif Line[0] == ".":
|
||||
L = Line.split("->")
|
||||
Elements = L[1].split(" ")
|
||||
if L[0][1:] == "Operators":
|
||||
self.OperatorsList += Elements
|
||||
if L[0][1:] == "OperatorsTwoOperand":
|
||||
self.OperatorsTwoOperand += Elements
|
||||
continue
|
||||
if L[0][1:] == "OperatorsOneOperand":
|
||||
self.OperatorsOneOperand += Elements
|
||||
continue
|
||||
elif L[0][1:] == "SemantiRules":
|
||||
self.SemantiRulesList += Elements
|
||||
|
|
@ -421,7 +426,11 @@ class LL1Parser:
|
|||
def WriteSemanticMaps(self):
|
||||
|
||||
Counter = 0
|
||||
for X in self.OperatorsList:
|
||||
for X in self.OperatorsOneOperand:
|
||||
self.CommonHeaderFile.write("#define " + "FUNC_" + X.upper() + " " + str(Counter) + "\n")
|
||||
Counter += 1
|
||||
|
||||
for X in self.OperatorsTwoOperand:
|
||||
self.CommonHeaderFile.write("#define " + "FUNC_" + X.upper() + " " + str(Counter) + "\n")
|
||||
Counter += 1
|
||||
|
||||
|
|
@ -438,7 +447,10 @@ class LL1Parser:
|
|||
self.SourceFile.write("const SYMBOL_MAP SemanticRulesMapList[]= {\n")
|
||||
self.HeaderFile.write("extern const SYMBOL_MAP SemanticRulesMapList[];\n")
|
||||
|
||||
for X in self.OperatorsList:
|
||||
for X in self.OperatorsOneOperand:
|
||||
self.SourceFile.write("{\"@" + X.upper() + "\", "+ "FUNC_" + X.upper() + "},\n")
|
||||
|
||||
for X in self.OperatorsTwoOperand:
|
||||
self.SourceFile.write("{\"@" + X.upper() + "\", "+ "FUNC_" + X.upper() + "},\n")
|
||||
|
||||
for X in self.SemantiRulesList:
|
||||
|
|
@ -526,12 +538,24 @@ class LL1Parser:
|
|||
self.SourceFile.write("};\n")
|
||||
|
||||
def WriteOperatorsList(self):
|
||||
self.SourceFile.write("const char* OperatorsList[]= {\n")
|
||||
self.HeaderFile.write("extern const char* OperatorsList[];\n")
|
||||
self.SourceFile.write("const char* OperatorsTwoOperandList[]= {\n")
|
||||
self.HeaderFile.write("extern const char* OperatorsTwoOperandList[];\n")
|
||||
|
||||
Counter = 0
|
||||
for X in self.OperatorsList:
|
||||
if Counter == len(self.OperatorsList)-1:
|
||||
for X in self.OperatorsTwoOperand:
|
||||
if Counter == len(self.OperatorsTwoOperand)-1:
|
||||
self.SourceFile.write("\"" + "@"+ X.upper() + "\"" + "\n")
|
||||
else:
|
||||
self.SourceFile.write("\"" + "@"+ X.upper() + "\"" + ",\n")
|
||||
Counter +=1
|
||||
self.SourceFile.write("};\n")
|
||||
|
||||
self.SourceFile.write("const char* OperatorsOneOperandList[]= {\n")
|
||||
self.HeaderFile.write("extern const char* OperatorsOneOperandList[];\n")
|
||||
|
||||
Counter = 0
|
||||
for X in self.OperatorsOneOperand:
|
||||
if Counter == len(self.OperatorsOneOperand)-1:
|
||||
self.SourceFile.write("\"" + "@"+ X.upper() + "\"" + "\n")
|
||||
else:
|
||||
self.SourceFile.write("\"" + "@"+ X.upper() + "\"" + ",\n")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue