diff --git a/hyperdbg/hprdbgctrl/code/debugger/script-engine-wrapper/script-engine-wrapper.cpp b/hyperdbg/hprdbgctrl/code/debugger/script-engine-wrapper/script-engine-wrapper.cpp index 4d855637..6fc0bb77 100644 --- a/hyperdbg/hprdbgctrl/code/debugger/script-engine-wrapper/script-engine-wrapper.cpp +++ b/hyperdbg/hprdbgctrl/code/debugger/script-engine-wrapper/script-engine-wrapper.cpp @@ -320,6 +320,14 @@ ScriptEngineEvalWrapper(PGUEST_REGS GuestRegs, if (!g_ScriptGlobalVariables) { g_ScriptGlobalVariables = (UINT64 *)malloc(MAX_VAR_COUNT * sizeof(UINT64)); + + if (g_ScriptGlobalVariables == NULL) + { + ShowMessages("err, could not allocate memory for user-mode global variables"); + + return; + } + RtlZeroMemory(g_ScriptGlobalVariables, MAX_VAR_COUNT * sizeof(UINT64)); } @@ -331,6 +339,16 @@ ScriptEngineEvalWrapper(PGUEST_REGS GuestRegs, if (!g_ScriptLocalVariables) { g_ScriptLocalVariables = (UINT64 *)malloc(MAX_VAR_COUNT * sizeof(UINT64)); + + if (g_ScriptLocalVariables == NULL) + { + free(g_ScriptGlobalVariables); + + ShowMessages("err, could not allocate memory for user-mode local variables"); + + return; + } + RtlZeroMemory(g_ScriptLocalVariables, MAX_VAR_COUNT * sizeof(UINT64)); } @@ -342,6 +360,17 @@ ScriptEngineEvalWrapper(PGUEST_REGS GuestRegs, if (!g_ScriptTempVariables) { g_ScriptTempVariables = (UINT64 *)malloc(MAX_TEMP_COUNT * sizeof(UINT64)); + + if (g_ScriptTempVariables == NULL) + { + free(g_ScriptGlobalVariables); + free(g_ScriptLocalVariables); + + ShowMessages("err, could not allocate memory for user-mode temp variables"); + + return; + } + RtlZeroMemory(g_ScriptTempVariables, MAX_TEMP_COUNT * sizeof(UINT64)); } @@ -498,9 +527,22 @@ AllocateStructForCasting(PALLOCATED_MEMORY_FOR_SCRIPT_ENGINE_CASTING Allocations WCHAR MyString1[40] = L"Hi come from stupid struct 1!"; UINT32 SizeOfMyString1 = (UINT32)wcslen(MyString1) * sizeof(WCHAR) + 2; PUNICODE_STRING UnicodeStr1 = (PUNICODE_STRING)malloc(sizeof(UNICODE_STRING)); - AllocationsForCastings->Buff1 = (CHAR *)UnicodeStr1; - WCHAR * Buff1 = (WCHAR *)malloc(SizeOfMyString1); - AllocationsForCastings->Buff2 = (CHAR *)Buff1; + + if (UnicodeStr1 == NULL) + { + return NULL; + } + + AllocationsForCastings->Buff1 = (CHAR *)UnicodeStr1; + WCHAR * Buff1 = (WCHAR *)malloc(SizeOfMyString1); + + if (Buff1 == NULL) + { + free(UnicodeStr1); + return NULL; + } + + AllocationsForCastings->Buff2 = (CHAR *)Buff1; RtlZeroMemory(Buff1, SizeOfMyString1); UnicodeStr1->Buffer = Buff1; UnicodeStr1->Length = UnicodeStr1->MaximumLength = SizeOfMyString1; @@ -512,9 +554,28 @@ AllocateStructForCasting(PALLOCATED_MEMORY_FOR_SCRIPT_ENGINE_CASTING Allocations WCHAR MyString2[40] = L"Goodbye I'm at stupid struct 2!"; UINT32 SizeOfMyString2 = (UINT32)wcslen(MyString2) * sizeof(WCHAR) + 2; PUNICODE_STRING UnicodeStr2 = (PUNICODE_STRING)malloc(sizeof(UNICODE_STRING)); - AllocationsForCastings->Buff3 = (CHAR *)UnicodeStr2; - WCHAR * Buff2 = (WCHAR *)malloc(SizeOfMyString2); - AllocationsForCastings->Buff4 = (CHAR *)Buff2; + + if (UnicodeStr2 == NULL) + { + free(UnicodeStr1); + free(Buff1); + + return NULL; + } + + AllocationsForCastings->Buff3 = (CHAR *)UnicodeStr2; + WCHAR * Buff2 = (WCHAR *)malloc(SizeOfMyString2); + + if (Buff2 == NULL) + { + free(UnicodeStr1); + free(Buff1); + free(UnicodeStr2); + + return NULL; + } + + AllocationsForCastings->Buff4 = (CHAR *)Buff2; RtlZeroMemory(Buff2, SizeOfMyString2); UnicodeStr2->Buffer = Buff2; UnicodeStr2->Length = UnicodeStr2->MaximumLength = SizeOfMyString2; @@ -524,6 +585,17 @@ AllocateStructForCasting(PALLOCATED_MEMORY_FOR_SCRIPT_ENGINE_CASTING Allocations // Allocate STUPID_STRUCT1 // PSTUPID_STRUCT1 StupidStruct1 = (PSTUPID_STRUCT1)malloc(sizeof(STUPID_STRUCT1)); + + if (StupidStruct1 == NULL) + { + free(UnicodeStr1); + free(Buff1); + free(UnicodeStr2); + free(Buff2); + + return NULL; + } + AllocationsForCastings->Buff5 = (CHAR *)StupidStruct1; StupidStruct1->Flag32 = 0x3232; StupidStruct1->Flag64 = 0x6464; @@ -534,6 +606,18 @@ AllocateStructForCasting(PALLOCATED_MEMORY_FOR_SCRIPT_ENGINE_CASTING Allocations // Allocate STUPID_STRUCT2 // PSTUPID_STRUCT2 StupidStruct2 = (PSTUPID_STRUCT2)malloc(sizeof(STUPID_STRUCT2)); + + if (StupidStruct2 == NULL) + { + free(UnicodeStr1); + free(Buff1); + free(UnicodeStr2); + free(Buff2); + free(StupidStruct1); + + return NULL; + } + AllocationsForCastings->Buff6 = (CHAR *)StupidStruct2; StupidStruct2->Sina32 = 0x32; @@ -566,6 +650,12 @@ ScriptEngineWrapperTestParser(const string & Expr) } TEST_STRUCT, *PTEST_STRUCT; PTEST_STRUCT TestStruct = (PTEST_STRUCT)malloc(sizeof(TEST_STRUCT)); + + if (TestStruct == NULL) + { + return; + } + RtlZeroMemory(TestStruct, sizeof(TEST_STRUCT)); TestStruct->Var1 = 0x41414141; @@ -577,8 +667,16 @@ ScriptEngineWrapperTestParser(const string & Expr) wchar_t testw[] = L"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 " L"9 a b c d e f g h i j k l m n o p q r s t u v w x y z"; + char * RspReg = (char *)malloc(0x100); - memcpy(RspReg, testw, 0x100); + + if (RspReg == NULL) + { + ShowMessages("err, unable to allocate stack for script engine tests"); + return; + } + + memcpy(RspReg, testw, sizeof(testw)); GuestRegs.rax = 0x1; GuestRegs.rcx = (UINT64)AllocateStructForCasting(&AllocationsForCastings); // TestStruct diff --git a/hyperdbg/script-engine/code/common.c b/hyperdbg/script-engine/code/common.c index 9262e0f3..b5e4c2ef 100644 --- a/hyperdbg/script-engine/code/common.c +++ b/hyperdbg/script-engine/code/common.c @@ -74,7 +74,7 @@ NewToken(TOKEN_TYPE Type, char * Value) // // Init fields // - unsigned int Len = strlen(Value); + unsigned int Len = (unsigned int)strlen(Value); Token->Type = Type; Token->Len = Len; Token->MaxLen = Len; @@ -670,7 +670,7 @@ NewStackTemp(PSCRIPT_ENGINE_ERROR_TYPE Error) void FreeTemp(PTOKEN Temp) { - int id = DecimalToInt(Temp->Value); + int id = (int)DecimalToInt(Temp->Value); if (Temp->Type == TEMP) { TempMap[id] = 0; @@ -1336,11 +1336,11 @@ SetType(unsigned long long * Val, unsigned char Type) * @param str * @return unsigned long long int */ -unsigned long long int +unsigned long long DecimalToInt(char * str) { - unsigned long long int Acc = 0; - size_t Len; + unsigned long long Acc = 0; + size_t Len; Len = strlen(str); for (int i = 0; i < Len; i++) @@ -1355,13 +1355,13 @@ DecimalToInt(char * str) * @brief Converts an decimal string to a signed integer * * @param str - * @return unsigned long long int + * @return unsigned long long */ -unsigned long long int +unsigned long long DecimalToSignedInt(char * str) { - long long int Acc = 0; - size_t Len; + long long Acc = 0; + size_t Len; if (str[0] == '-') { @@ -1389,14 +1389,14 @@ DecimalToSignedInt(char * str) * @brief Converts an hexadecimal string to integer * * @param str - * @return unsigned long long int + * @return unsigned long long */ -unsigned long long int +unsigned long long HexToInt(char * str) { - char temp; - size_t len = strlen(str); - unsigned long long int Acc = 0; + char temp; + size_t len = strlen(str); + unsigned long long Acc = 0; for (int i = 0; i < len; i++) { Acc <<= 4; @@ -1422,13 +1422,13 @@ HexToInt(char * str) * @brief Converts an octal string to integer * * @param str - * @return unsigned long long int + * @return unsigned long long */ -unsigned long long int +unsigned long long OctalToInt(char * str) { - size_t Len; - unsigned long long int Acc = 0; + size_t Len; + unsigned long long Acc = 0; Len = strlen(str); @@ -1444,13 +1444,13 @@ OctalToInt(char * str) * @brief Converts a binary string to integer * * @param str - * @return unsigned long long int + * @return unsigned long long */ -unsigned long long int +unsigned long long BinaryToInt(char * str) { - size_t Len; - unsigned long long int Acc = 0; + size_t Len; + unsigned long long Acc = 0; Len = strlen(str); diff --git a/hyperdbg/script-engine/code/parse-table.c b/hyperdbg/script-engine/code/parse-table.c index 88a4aa5d..739fdafb 100644 --- a/hyperdbg/script-engine/code/parse-table.c +++ b/hyperdbg/script-engine/code/parse-table.c @@ -204,211 +204,210 @@ const struct _TOKEN Lhs[RULES_COUNT]= {NON_TERMINAL, "WstringNumber"}, {NON_TERMINAL, "WstringNumber"} }; -const struct _TOKEN Rhs[RULES_COUNT][MAX_RHS_LEN]= -{ - {{NON_TERMINAL, "STATEMENT"},{NON_TERMINAL, "S"}}, - {{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "STATEMENT"},{NON_TERMINAL, "S"},{SPECIAL_TOKEN, "}"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "IF_STATEMENT"}}, - {{NON_TERMINAL, "WHILE_STATEMENT"}}, - {{NON_TERMINAL, "DO_WHILE_STATEMENT"}}, - {{NON_TERMINAL, "FOR_STATEMENT"}}, - {{NON_TERMINAL, "L_VALUE"},{NON_TERMINAL, "L_VALUE2"}}, - {{NON_TERMINAL, "CALL_FUNC_STATEMENT"},{SPECIAL_TOKEN, ";"}}, - {{KEYWORD, "break"},{SEMANTIC_RULE, "@BREAK"},{SPECIAL_TOKEN, ";"}}, - {{KEYWORD, "continue"},{SEMANTIC_RULE, "@CONTINUE"},{SPECIAL_TOKEN, ";"}}, - {{NON_TERMINAL, "VARIABLE_TYPE3"}}, - {{NON_TERMINAL, "STATEMENT2"},{NON_TERMINAL, "S2"}}, - {{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "STATEMENT2"},{NON_TERMINAL, "S2"},{SPECIAL_TOKEN, "}"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "IF_STATEMENT"}}, - {{NON_TERMINAL, "WHILE_STATEMENT"}}, - {{NON_TERMINAL, "DO_WHILE_STATEMENT"}}, - {{NON_TERMINAL, "FOR_STATEMENT"}}, - {{NON_TERMINAL, "L_VALUE"},{NON_TERMINAL, "L_VALUE2"}}, - {{NON_TERMINAL, "CALL_FUNC_STATEMENT"},{SPECIAL_TOKEN, ";"}}, - {{KEYWORD, "break"},{SEMANTIC_RULE, "@BREAK"},{SPECIAL_TOKEN, ";"}}, - {{KEYWORD, "continue"},{SEMANTIC_RULE, "@CONTINUE"},{SPECIAL_TOKEN, ";"}}, - {{NON_TERMINAL, "VARIABLE_TYPE1"},{NON_TERMINAL, "VARIABLE_TYPE2"},{NON_TERMINAL, "L_VALUE"},{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"},{SPECIAL_TOKEN, ";"}}, - {{KEYWORD, "return"},{NON_TERMINAL, "RETURN"},{SPECIAL_TOKEN, ";"}}, - {{EPSILON, "eps"},{SEMANTIC_RULE, "@RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE"}}, - {{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE"}}, - {{SEMANTIC_RULE, "@VOID"},{KEYWORD, "void"}}, - {{SEMANTIC_RULE, "@BOOL"},{KEYWORD, "bool"}}, - {{SEMANTIC_RULE, "@CHAR"},{KEYWORD, "char"}}, - {{SEMANTIC_RULE, "@SHORT"},{KEYWORD, "short"}}, - {{SEMANTIC_RULE, "@INT"},{KEYWORD, "int"}}, - {{SEMANTIC_RULE, "@LONG"},{KEYWORD, "long"}}, - {{SEMANTIC_RULE, "@UNSIGNED"},{KEYWORD, "unsigned"}}, - {{SEMANTIC_RULE, "@SIGNED"},{KEYWORD, "signed"}}, - {{SEMANTIC_RULE, "@FLOAT"},{KEYWORD, "float"}}, - {{SEMANTIC_RULE, "@DOUBLE"},{KEYWORD, "double"}}, - {{NON_TERMINAL, "VARIABLE_TYPE1"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "VARIABLE_TYPE1"},{NON_TERMINAL, "VARIABLE_TYPE2"},{NON_TERMINAL, "L_VALUE"},{NON_TERMINAL, "VARIABLE_TYPE4"}}, - {{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"},{SPECIAL_TOKEN, ";"}}, - {{SEMANTIC_RULE, "@START_OF_USER_DEFINED_FUNCTION"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "VARIABLE_TYPE5"},{SPECIAL_TOKEN, ")"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SEMANTIC_RULE, "@END_OF_USER_DEFINED_FUNCTION"},{SPECIAL_TOKEN, "}"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "VARIABLE_TYPE1"},{NON_TERMINAL, "VARIABLE_TYPE2"},{NON_TERMINAL, "L_VALUE"},{SEMANTIC_RULE, "@FUNCTION_PARAMETER"},{NON_TERMINAL, "VARIABLE_TYPE6"}}, - {{SPECIAL_TOKEN, ","},{NON_TERMINAL, "VARIABLE_TYPE1"},{NON_TERMINAL, "VARIABLE_TYPE2"},{NON_TERMINAL, "L_VALUE"},{SEMANTIC_RULE, "@FUNCTION_PARAMETER"},{NON_TERMINAL, "VARIABLE_TYPE6"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "ASSIGNMENT_STATEMENT'"},{SPECIAL_TOKEN, ";"}}, - {{SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE"},{SPECIAL_TOKEN, ";"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION_PARAMETER"},{NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER2"}}, - {{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION_PARAMETER"},{NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER2"}}, - {{EPSILON, "eps"}}, - {{SPECIAL_TOKEN, "++"},{SEMANTIC_RULE, "@INC"}}, - {{SPECIAL_TOKEN, "--"},{SEMANTIC_RULE, "@DEC"}}, - {{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"}}, - {{KEYWORD, "print"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@PRINT"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "formats"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@FORMATS"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "event_enable"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@EVENT_ENABLE"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "event_disable"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@EVENT_DISABLE"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "event_clear"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@EVENT_CLEAR"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "test_statement"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@TEST_STATEMENT"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "spinlock_lock"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@SPINLOCK_LOCK"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "spinlock_unlock"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@SPINLOCK_UNLOCK"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "event_sc"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@EVENT_SC"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "printf"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "STRING"},{SEMANTIC_RULE, "@VARGSTART"},{NON_TERMINAL, "VA"},{SEMANTIC_RULE, "@PRINTF"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "pause"},{SPECIAL_TOKEN, "("},{SEMANTIC_RULE, "@PAUSE"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "flush"},{SPECIAL_TOKEN, "("},{SEMANTIC_RULE, "@FLUSH"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "event_trace_step"},{SPECIAL_TOKEN, "("},{SEMANTIC_RULE, "@EVENT_TRACE_STEP"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "event_trace_step_in"},{SPECIAL_TOKEN, "("},{SEMANTIC_RULE, "@EVENT_TRACE_STEP_IN"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "event_trace_step_out"},{SPECIAL_TOKEN, "("},{SEMANTIC_RULE, "@EVENT_TRACE_STEP_OUT"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "event_trace_instrumentation_step"},{SPECIAL_TOKEN, "("},{SEMANTIC_RULE, "@EVENT_TRACE_INSTRUMENTATION_STEP"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "event_trace_instrumentation_step_in"},{SPECIAL_TOKEN, "("},{SEMANTIC_RULE, "@EVENT_TRACE_INSTRUMENTATION_STEP_IN"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "spinlock_lock_custom_wait"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@SPINLOCK_LOCK_CUSTOM_WAIT"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "event_inject"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@EVENT_INJECT"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "poi"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@POI"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "db"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DB"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "dd"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DD"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "dw"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DW"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "dq"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DQ"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "neg"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@NEG"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "hi"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@HI"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "low"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@LOW"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "not"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@NOT"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "check_address"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@CHECK_ADDRESS"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "disassemble_len"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DISASSEMBLE_LEN"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "disassemble_len32"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DISASSEMBLE_LEN32"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "disassemble_len64"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DISASSEMBLE_LEN64"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "interlocked_increment"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@INTERLOCKED_INCREMENT"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "interlocked_decrement"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@INTERLOCKED_DECREMENT"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "reference"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@REFERENCE"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "physical_to_virtual"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@PHYSICAL_TO_VIRTUAL"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "virtual_to_physical"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@VIRTUAL_TO_PHYSICAL"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "ed"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@ED"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "eb"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@EB"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "eq"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@EQ"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "interlocked_exchange"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@INTERLOCKED_EXCHANGE"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "interlocked_exchange_add"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@INTERLOCKED_EXCHANGE_ADD"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "interlocked_compare_exchange"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@INTERLOCKED_COMPARE_EXCHANGE"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "strlen"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "StringNumber"},{SEMANTIC_RULE, "@STRLEN"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "strcmp"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "StringNumber"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "StringNumber"},{SEMANTIC_RULE, "@STRCMP"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "memcmp"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "StringNumber"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "StringNumber"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MEMCMP"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "wcslen"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "WstringNumber"},{SEMANTIC_RULE, "@WCSLEN"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "wcscmp"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "WstringNumber"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "WstringNumber"},{SEMANTIC_RULE, "@WCSCMP"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@IGNORE_LVALUE"}}, - {{KEYWORD, "event_inject_error_code"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@EVENT_INJECT_ERROR_CODE"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "memcpy"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MEMCPY"},{SPECIAL_TOKEN, ")"}}, - {{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{NON_TERMINAL, "VA"}}, - {{EPSILON, "eps"}}, - {{KEYWORD, "if"},{SEMANTIC_RULE, "@START_OF_IF"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@JZ"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SPECIAL_TOKEN, "}"},{NON_TERMINAL, "ELSIF_STATEMENT"},{NON_TERMINAL, "ELSE_STATEMENT"},{SEMANTIC_RULE, "@END_OF_IF"},{NON_TERMINAL, "END_OF_IF"}}, - {{KEYWORD, "elsif"},{SEMANTIC_RULE, "@JMP_TO_END_AND_JZCOMPLETED"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@JZ"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SPECIAL_TOKEN, "}"},{NON_TERMINAL, "ELSIF_STATEMENT"}}, - {{SEMANTIC_RULE, "@JMP_TO_END_AND_JZCOMPLETED"},{NON_TERMINAL, "ELSIF_STATEMENT'"}}, - {{EPSILON, "eps"}}, - {{KEYWORD, "else"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SPECIAL_TOKEN, "}"}}, - {{EPSILON, "eps"}}, - {{EPSILON, "eps"}}, - {{KEYWORD, "while"},{SEMANTIC_RULE, "@START_OF_WHILE"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@START_OF_WHILE_COMMANDS"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SEMANTIC_RULE, "@END_OF_WHILE"},{SPECIAL_TOKEN, "}"}}, - {{KEYWORD, "do"},{SEMANTIC_RULE, "@START_OF_DO_WHILE"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SPECIAL_TOKEN, "}"},{KEYWORD, "while"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@END_OF_DO_WHILE"},{SPECIAL_TOKEN, ";"}}, - {{KEYWORD, "for"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "SIMPLE_ASSIGNMENT"},{SPECIAL_TOKEN, ";"},{SEMANTIC_RULE, "@START_OF_FOR"},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ";"},{SEMANTIC_RULE, "@FOR_INC_DEC"},{NON_TERMINAL, "INC_DEC"},{SPECIAL_TOKEN, ")"},{SPECIAL_TOKEN, "{"},{SEMANTIC_RULE, "@START_OF_FOR_COMMANDS"},{NON_TERMINAL, "S2"},{SEMANTIC_RULE, "@END_OF_FOR"},{SPECIAL_TOKEN, "}"}}, - {{NON_TERMINAL, "VARIABLE_TYPE1"},{NON_TERMINAL, "VARIABLE_TYPE2"},{NON_TERMINAL, "L_VALUE"},{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"},{NON_TERMINAL, "SIMPLE_ASSIGNMENT'"}}, - {{NON_TERMINAL, "L_VALUE"},{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"},{NON_TERMINAL, "SIMPLE_ASSIGNMENT'"}}, - {{EPSILON, "eps"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "L_VALUE"},{NON_TERMINAL, "INC_DEC'"}}, - {{SPECIAL_TOKEN, "++"},{SEMANTIC_RULE, "@INC"}}, - {{SPECIAL_TOKEN, "--"},{SEMANTIC_RULE, "@DEC"}}, - {{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"},{NON_TERMINAL, "SIMPLE_ASSIGNMENT'"}}, - {{EPSILON, "eps"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "E1"},{NON_TERMINAL, "E0'"}}, - {{SPECIAL_TOKEN, "|"},{NON_TERMINAL, "E1"},{SEMANTIC_RULE, "@OR"},{NON_TERMINAL, "E0'"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "E2"},{NON_TERMINAL, "E1'"}}, - {{SPECIAL_TOKEN, "^"},{NON_TERMINAL, "E2"},{SEMANTIC_RULE, "@XOR"},{NON_TERMINAL, "E1'"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "E3"},{NON_TERMINAL, "E2'"}}, - {{SPECIAL_TOKEN, "&"},{NON_TERMINAL, "E3"},{SEMANTIC_RULE, "@AND"},{NON_TERMINAL, "E2'"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "E4"},{NON_TERMINAL, "E3'"}}, - {{SPECIAL_TOKEN, ">>"},{NON_TERMINAL, "E4"},{SEMANTIC_RULE, "@ASR"},{NON_TERMINAL, "E3'"}}, - {{SPECIAL_TOKEN, "<<"},{NON_TERMINAL, "E4"},{SEMANTIC_RULE, "@ASL"},{NON_TERMINAL, "E3'"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "E5"},{NON_TERMINAL, "E4'"}}, - {{SPECIAL_TOKEN, "+"},{NON_TERMINAL, "E5"},{SEMANTIC_RULE, "@ADD"},{NON_TERMINAL, "E4'"}}, - {{SPECIAL_TOKEN, "-"},{NON_TERMINAL, "E5"},{SEMANTIC_RULE, "@SUB"},{NON_TERMINAL, "E4'"}}, - {{EPSILON, "eps"}}, - {{NON_TERMINAL, "E12"},{NON_TERMINAL, "E5'"}}, - {{SPECIAL_TOKEN, "/"},{NON_TERMINAL, "E12"},{SEMANTIC_RULE, "@DIV"},{NON_TERMINAL, "E5'"}}, - {{SPECIAL_TOKEN, "%"},{NON_TERMINAL, "E12"},{SEMANTIC_RULE, "@MOD"},{NON_TERMINAL, "E5'"}}, - {{SPECIAL_TOKEN, "*"},{NON_TERMINAL, "E12"},{SEMANTIC_RULE, "@MUL"},{NON_TERMINAL, "E5'"}}, - {{EPSILON, "eps"}}, - {{KEYWORD, "poi"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@POI"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "db"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DB"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "dd"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DD"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "dw"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DW"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "dq"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DQ"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "neg"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@NEG"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "hi"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@HI"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "low"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@LOW"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "not"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@NOT"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "check_address"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@CHECK_ADDRESS"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "disassemble_len"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DISASSEMBLE_LEN"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "disassemble_len32"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DISASSEMBLE_LEN32"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "disassemble_len64"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@DISASSEMBLE_LEN64"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "interlocked_increment"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@INTERLOCKED_INCREMENT"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "interlocked_decrement"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@INTERLOCKED_DECREMENT"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "reference"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@REFERENCE"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "physical_to_virtual"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@PHYSICAL_TO_VIRTUAL"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "virtual_to_physical"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@VIRTUAL_TO_PHYSICAL"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "ed"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@ED"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "eb"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@EB"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "eq"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@EQ"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "interlocked_exchange"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@INTERLOCKED_EXCHANGE"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "interlocked_exchange_add"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@INTERLOCKED_EXCHANGE_ADD"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "interlocked_compare_exchange"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@INTERLOCKED_COMPARE_EXCHANGE"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "strlen"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "StringNumber"},{SEMANTIC_RULE, "@STRLEN"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "strcmp"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "StringNumber"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "StringNumber"},{SEMANTIC_RULE, "@STRCMP"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "memcmp"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "StringNumber"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "StringNumber"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MEMCMP"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "wcslen"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "WstringNumber"},{SEMANTIC_RULE, "@WCSLEN"},{SPECIAL_TOKEN, ")"}}, - {{KEYWORD, "wcscmp"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "WstringNumber"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "WstringNumber"},{SEMANTIC_RULE, "@WCSCMP"},{SPECIAL_TOKEN, ")"}}, - {{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ")"}}, - {{NON_TERMINAL, "L_VALUE"},{NON_TERMINAL, "E13"}}, - {{EPSILON, "eps"}}, - {{SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE"}}, - {{SEMANTIC_RULE, "@PUSH"},{HEX, "_hex"}}, - {{SEMANTIC_RULE, "@PUSH"},{DECIMAL, "_decimal"}}, - {{SEMANTIC_RULE, "@PUSH"},{OCTAL, "_octal"}}, - {{SEMANTIC_RULE, "@PUSH"},{BINARY, "_binary"}}, - {{SEMANTIC_RULE, "@PUSH"},{PSEUDO_REGISTER, "_pseudo_register"}}, - {{SPECIAL_TOKEN, "-"},{NON_TERMINAL, "E12"},{SEMANTIC_RULE, "@NEG"}}, - {{SPECIAL_TOKEN, "+"},{NON_TERMINAL, "E12"}}, - {{SPECIAL_TOKEN, "~"},{NON_TERMINAL, "E12"},{SEMANTIC_RULE, "@NOT"}}, - {{SPECIAL_TOKEN, "*"},{NON_TERMINAL, "E12"},{SEMANTIC_RULE, "@POI"}}, - {{SPECIAL_TOKEN, "&"},{NON_TERMINAL, "E12"},{SEMANTIC_RULE, "@REFERENCE"}}, - {{SEMANTIC_RULE, "@PUSH"},{STRING, "_string"}}, - {{SEMANTIC_RULE, "@PUSH"},{WSTRING, "_wstring"}}, - {{SEMANTIC_RULE, "@PUSH"},{GLOBAL_ID, "_global_id"}}, - {{SEMANTIC_RULE, "@PUSH"},{LOCAL_ID, "_local_id"}}, - {{SEMANTIC_RULE, "@PUSH"},{REGISTER, "_register"}}, - {{SEMANTIC_RULE, "@PUSH"},{FUNCTION_PARAMETER_ID, "_function_parameter_id"}}, - {{NON_TERMINAL, "EXPRESSION"}}, - {{NON_TERMINAL, "STRING"}}, - {{NON_TERMINAL, "EXPRESSION"}}, - {{NON_TERMINAL, "WSTRING"}} -}; +const struct _TOKEN Rhs[RULES_COUNT][MAX_RHS_LEN] = + { + {{NON_TERMINAL, "STATEMENT"}, {NON_TERMINAL, "S"}}, + {{SPECIAL_TOKEN, "{"}, {NON_TERMINAL, "STATEMENT"}, {NON_TERMINAL, "S"}, {SPECIAL_TOKEN, "}"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "IF_STATEMENT"}}, + {{NON_TERMINAL, "WHILE_STATEMENT"}}, + {{NON_TERMINAL, "DO_WHILE_STATEMENT"}}, + {{NON_TERMINAL, "FOR_STATEMENT"}}, + {{NON_TERMINAL, "L_VALUE"}, {NON_TERMINAL, "L_VALUE2"}}, + {{NON_TERMINAL, "CALL_FUNC_STATEMENT"}, {SPECIAL_TOKEN, ";"}}, + {{KEYWORD, "break"}, {SEMANTIC_RULE, "@BREAK"}, {SPECIAL_TOKEN, ";"}}, + {{KEYWORD, "continue"}, {SEMANTIC_RULE, "@CONTINUE"}, {SPECIAL_TOKEN, ";"}}, + {{NON_TERMINAL, "VARIABLE_TYPE3"}}, + {{NON_TERMINAL, "STATEMENT2"}, {NON_TERMINAL, "S2"}}, + {{SPECIAL_TOKEN, "{"}, {NON_TERMINAL, "STATEMENT2"}, {NON_TERMINAL, "S2"}, {SPECIAL_TOKEN, "}"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "IF_STATEMENT"}}, + {{NON_TERMINAL, "WHILE_STATEMENT"}}, + {{NON_TERMINAL, "DO_WHILE_STATEMENT"}}, + {{NON_TERMINAL, "FOR_STATEMENT"}}, + {{NON_TERMINAL, "L_VALUE"}, {NON_TERMINAL, "L_VALUE2"}}, + {{NON_TERMINAL, "CALL_FUNC_STATEMENT"}, {SPECIAL_TOKEN, ";"}}, + {{KEYWORD, "break"}, {SEMANTIC_RULE, "@BREAK"}, {SPECIAL_TOKEN, ";"}}, + {{KEYWORD, "continue"}, {SEMANTIC_RULE, "@CONTINUE"}, {SPECIAL_TOKEN, ";"}}, + {{NON_TERMINAL, "VARIABLE_TYPE1"}, {NON_TERMINAL, "VARIABLE_TYPE2"}, {NON_TERMINAL, "L_VALUE"}, {SPECIAL_TOKEN, "="}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@MOV"}, {SPECIAL_TOKEN, ";"}}, + {{KEYWORD, "return"}, {NON_TERMINAL, "RETURN"}, {SPECIAL_TOKEN, ";"}}, + {{EPSILON, "eps"}, {SEMANTIC_RULE, "@RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE"}}, + {{NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE"}}, + {{SEMANTIC_RULE, "@VOID"}, {KEYWORD, "void"}}, + {{SEMANTIC_RULE, "@BOOL"}, {KEYWORD, "bool"}}, + {{SEMANTIC_RULE, "@CHAR"}, {KEYWORD, "char"}}, + {{SEMANTIC_RULE, "@SHORT"}, {KEYWORD, "short"}}, + {{SEMANTIC_RULE, "@INT"}, {KEYWORD, "int"}}, + {{SEMANTIC_RULE, "@LONG"}, {KEYWORD, "long"}}, + {{SEMANTIC_RULE, "@UNSIGNED"}, {KEYWORD, "unsigned"}}, + {{SEMANTIC_RULE, "@SIGNED"}, {KEYWORD, "signed"}}, + {{SEMANTIC_RULE, "@FLOAT"}, {KEYWORD, "float"}}, + {{SEMANTIC_RULE, "@DOUBLE"}, {KEYWORD, "double"}}, + {{NON_TERMINAL, "VARIABLE_TYPE1"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "VARIABLE_TYPE1"}, {NON_TERMINAL, "VARIABLE_TYPE2"}, {NON_TERMINAL, "L_VALUE"}, {NON_TERMINAL, "VARIABLE_TYPE4"}}, + {{SPECIAL_TOKEN, "="}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@MOV"}, {SPECIAL_TOKEN, ";"}}, + {{SEMANTIC_RULE, "@START_OF_USER_DEFINED_FUNCTION"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "VARIABLE_TYPE5"}, {SPECIAL_TOKEN, ")"}, {SPECIAL_TOKEN, "{"}, {NON_TERMINAL, "S2"}, {SEMANTIC_RULE, "@END_OF_USER_DEFINED_FUNCTION"}, {SPECIAL_TOKEN, "}"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "VARIABLE_TYPE1"}, {NON_TERMINAL, "VARIABLE_TYPE2"}, {NON_TERMINAL, "L_VALUE"}, {SEMANTIC_RULE, "@FUNCTION_PARAMETER"}, {NON_TERMINAL, "VARIABLE_TYPE6"}}, + {{SPECIAL_TOKEN, ","}, {NON_TERMINAL, "VARIABLE_TYPE1"}, {NON_TERMINAL, "VARIABLE_TYPE2"}, {NON_TERMINAL, "L_VALUE"}, {SEMANTIC_RULE, "@FUNCTION_PARAMETER"}, {NON_TERMINAL, "VARIABLE_TYPE6"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "ASSIGNMENT_STATEMENT'"}, {SPECIAL_TOKEN, ";"}}, + {{SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE"}, {SPECIAL_TOKEN, ";"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION_PARAMETER"}, {NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER2"}}, + {{SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION_PARAMETER"}, {NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER2"}}, + {{EPSILON, "eps"}}, + {{SPECIAL_TOKEN, "++"}, {SEMANTIC_RULE, "@INC"}}, + {{SPECIAL_TOKEN, "--"}, {SEMANTIC_RULE, "@DEC"}}, + {{SPECIAL_TOKEN, "="}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@MOV"}}, + {{KEYWORD, "print"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@PRINT"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "formats"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@FORMATS"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "event_enable"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@EVENT_ENABLE"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "event_disable"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@EVENT_DISABLE"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "event_clear"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@EVENT_CLEAR"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "test_statement"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@TEST_STATEMENT"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "spinlock_lock"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@SPINLOCK_LOCK"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "spinlock_unlock"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@SPINLOCK_UNLOCK"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "event_sc"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@EVENT_SC"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "printf"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "STRING"}, {SEMANTIC_RULE, "@VARGSTART"}, {NON_TERMINAL, "VA"}, {SEMANTIC_RULE, "@PRINTF"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "pause"}, {SPECIAL_TOKEN, "("}, {SEMANTIC_RULE, "@PAUSE"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "flush"}, {SPECIAL_TOKEN, "("}, {SEMANTIC_RULE, "@FLUSH"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "event_trace_step"}, {SPECIAL_TOKEN, "("}, {SEMANTIC_RULE, "@EVENT_TRACE_STEP"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "event_trace_step_in"}, {SPECIAL_TOKEN, "("}, {SEMANTIC_RULE, "@EVENT_TRACE_STEP_IN"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "event_trace_step_out"}, {SPECIAL_TOKEN, "("}, {SEMANTIC_RULE, "@EVENT_TRACE_STEP_OUT"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "event_trace_instrumentation_step"}, {SPECIAL_TOKEN, "("}, {SEMANTIC_RULE, "@EVENT_TRACE_INSTRUMENTATION_STEP"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "event_trace_instrumentation_step_in"}, {SPECIAL_TOKEN, "("}, {SEMANTIC_RULE, "@EVENT_TRACE_INSTRUMENTATION_STEP_IN"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "spinlock_lock_custom_wait"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@SPINLOCK_LOCK_CUSTOM_WAIT"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "event_inject"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@EVENT_INJECT"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "poi"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@POI"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "db"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DB"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "dd"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DD"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "dw"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DW"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "dq"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DQ"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "neg"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@NEG"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "hi"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@HI"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "low"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@LOW"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "not"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@NOT"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "check_address"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@CHECK_ADDRESS"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "disassemble_len"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DISASSEMBLE_LEN"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "disassemble_len32"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DISASSEMBLE_LEN32"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "disassemble_len64"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DISASSEMBLE_LEN64"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "interlocked_increment"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@INTERLOCKED_INCREMENT"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "interlocked_decrement"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@INTERLOCKED_DECREMENT"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "reference"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@REFERENCE"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "physical_to_virtual"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@PHYSICAL_TO_VIRTUAL"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "virtual_to_physical"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@VIRTUAL_TO_PHYSICAL"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "ed"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@ED"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "eb"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@EB"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "eq"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@EQ"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "interlocked_exchange"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@INTERLOCKED_EXCHANGE"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "interlocked_exchange_add"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@INTERLOCKED_EXCHANGE_ADD"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "interlocked_compare_exchange"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@INTERLOCKED_COMPARE_EXCHANGE"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "strlen"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "StringNumber"}, {SEMANTIC_RULE, "@STRLEN"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "strcmp"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "StringNumber"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "StringNumber"}, {SEMANTIC_RULE, "@STRCMP"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "memcmp"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "StringNumber"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "StringNumber"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@MEMCMP"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "wcslen"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "WstringNumber"}, {SEMANTIC_RULE, "@WCSLEN"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "wcscmp"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "WstringNumber"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "WstringNumber"}, {SEMANTIC_RULE, "@WCSCMP"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@IGNORE_LVALUE"}}, + {{KEYWORD, "event_inject_error_code"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@EVENT_INJECT_ERROR_CODE"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "memcpy"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@MEMCPY"}, {SPECIAL_TOKEN, ")"}}, + {{SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {NON_TERMINAL, "VA"}}, + {{EPSILON, "eps"}}, + {{KEYWORD, "if"}, {SEMANTIC_RULE, "@START_OF_IF"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "BOOLEAN_EXPRESSION"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@JZ"}, {SPECIAL_TOKEN, "{"}, {NON_TERMINAL, "S2"}, {SPECIAL_TOKEN, "}"}, {NON_TERMINAL, "ELSIF_STATEMENT"}, {NON_TERMINAL, "ELSE_STATEMENT"}, {SEMANTIC_RULE, "@END_OF_IF"}, {NON_TERMINAL, "END_OF_IF"}}, + {{KEYWORD, "elsif"}, {SEMANTIC_RULE, "@JMP_TO_END_AND_JZCOMPLETED"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "BOOLEAN_EXPRESSION"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@JZ"}, {SPECIAL_TOKEN, "{"}, {NON_TERMINAL, "S2"}, {SPECIAL_TOKEN, "}"}, {NON_TERMINAL, "ELSIF_STATEMENT"}}, + {{SEMANTIC_RULE, "@JMP_TO_END_AND_JZCOMPLETED"}, {NON_TERMINAL, "ELSIF_STATEMENT'"}}, + {{EPSILON, "eps"}}, + {{KEYWORD, "else"}, {SPECIAL_TOKEN, "{"}, {NON_TERMINAL, "S2"}, {SPECIAL_TOKEN, "}"}}, + {{EPSILON, "eps"}}, + {{EPSILON, "eps"}}, + {{KEYWORD, "while"}, {SEMANTIC_RULE, "@START_OF_WHILE"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "BOOLEAN_EXPRESSION"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@START_OF_WHILE_COMMANDS"}, {SPECIAL_TOKEN, "{"}, {NON_TERMINAL, "S2"}, {SEMANTIC_RULE, "@END_OF_WHILE"}, {SPECIAL_TOKEN, "}"}}, + {{KEYWORD, "do"}, {SEMANTIC_RULE, "@START_OF_DO_WHILE"}, {SPECIAL_TOKEN, "{"}, {NON_TERMINAL, "S2"}, {SPECIAL_TOKEN, "}"}, {KEYWORD, "while"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "BOOLEAN_EXPRESSION"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@END_OF_DO_WHILE"}, {SPECIAL_TOKEN, ";"}}, + {{KEYWORD, "for"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "SIMPLE_ASSIGNMENT"}, {SPECIAL_TOKEN, ";"}, {SEMANTIC_RULE, "@START_OF_FOR"}, {NON_TERMINAL, "BOOLEAN_EXPRESSION"}, {SPECIAL_TOKEN, ";"}, {SEMANTIC_RULE, "@FOR_INC_DEC"}, {NON_TERMINAL, "INC_DEC"}, {SPECIAL_TOKEN, ")"}, {SPECIAL_TOKEN, "{"}, {SEMANTIC_RULE, "@START_OF_FOR_COMMANDS"}, {NON_TERMINAL, "S2"}, {SEMANTIC_RULE, "@END_OF_FOR"}, {SPECIAL_TOKEN, "}"}}, + {{NON_TERMINAL, "VARIABLE_TYPE1"}, {NON_TERMINAL, "VARIABLE_TYPE2"}, {NON_TERMINAL, "L_VALUE"}, {SPECIAL_TOKEN, "="}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@MOV"}, {NON_TERMINAL, "SIMPLE_ASSIGNMENT'"}}, + {{NON_TERMINAL, "L_VALUE"}, {SPECIAL_TOKEN, "="}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@MOV"}, {NON_TERMINAL, "SIMPLE_ASSIGNMENT'"}}, + {{EPSILON, "eps"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "L_VALUE"}, {NON_TERMINAL, "INC_DEC'"}}, + {{SPECIAL_TOKEN, "++"}, {SEMANTIC_RULE, "@INC"}}, + {{SPECIAL_TOKEN, "--"}, {SEMANTIC_RULE, "@DEC"}}, + {{SPECIAL_TOKEN, "="}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@MOV"}, {NON_TERMINAL, "SIMPLE_ASSIGNMENT'"}}, + {{EPSILON, "eps"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "E1"}, {NON_TERMINAL, "E0'"}}, + {{SPECIAL_TOKEN, "|"}, {NON_TERMINAL, "E1"}, {SEMANTIC_RULE, "@OR"}, {NON_TERMINAL, "E0'"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "E2"}, {NON_TERMINAL, "E1'"}}, + {{SPECIAL_TOKEN, "^"}, {NON_TERMINAL, "E2"}, {SEMANTIC_RULE, "@XOR"}, {NON_TERMINAL, "E1'"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "E3"}, {NON_TERMINAL, "E2'"}}, + {{SPECIAL_TOKEN, "&"}, {NON_TERMINAL, "E3"}, {SEMANTIC_RULE, "@AND"}, {NON_TERMINAL, "E2'"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "E4"}, {NON_TERMINAL, "E3'"}}, + {{SPECIAL_TOKEN, ">>"}, {NON_TERMINAL, "E4"}, {SEMANTIC_RULE, "@ASR"}, {NON_TERMINAL, "E3'"}}, + {{SPECIAL_TOKEN, "<<"}, {NON_TERMINAL, "E4"}, {SEMANTIC_RULE, "@ASL"}, {NON_TERMINAL, "E3'"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "E5"}, {NON_TERMINAL, "E4'"}}, + {{SPECIAL_TOKEN, "+"}, {NON_TERMINAL, "E5"}, {SEMANTIC_RULE, "@ADD"}, {NON_TERMINAL, "E4'"}}, + {{SPECIAL_TOKEN, "-"}, {NON_TERMINAL, "E5"}, {SEMANTIC_RULE, "@SUB"}, {NON_TERMINAL, "E4'"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "E12"}, {NON_TERMINAL, "E5'"}}, + {{SPECIAL_TOKEN, "/"}, {NON_TERMINAL, "E12"}, {SEMANTIC_RULE, "@DIV"}, {NON_TERMINAL, "E5'"}}, + {{SPECIAL_TOKEN, "%"}, {NON_TERMINAL, "E12"}, {SEMANTIC_RULE, "@MOD"}, {NON_TERMINAL, "E5'"}}, + {{SPECIAL_TOKEN, "*"}, {NON_TERMINAL, "E12"}, {SEMANTIC_RULE, "@MUL"}, {NON_TERMINAL, "E5'"}}, + {{EPSILON, "eps"}}, + {{KEYWORD, "poi"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@POI"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "db"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DB"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "dd"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DD"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "dw"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DW"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "dq"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DQ"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "neg"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@NEG"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "hi"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@HI"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "low"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@LOW"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "not"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@NOT"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "check_address"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@CHECK_ADDRESS"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "disassemble_len"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DISASSEMBLE_LEN"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "disassemble_len32"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DISASSEMBLE_LEN32"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "disassemble_len64"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@DISASSEMBLE_LEN64"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "interlocked_increment"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@INTERLOCKED_INCREMENT"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "interlocked_decrement"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@INTERLOCKED_DECREMENT"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "reference"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@REFERENCE"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "physical_to_virtual"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@PHYSICAL_TO_VIRTUAL"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "virtual_to_physical"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@VIRTUAL_TO_PHYSICAL"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "ed"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@ED"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "eb"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@EB"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "eq"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@EQ"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "interlocked_exchange"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@INTERLOCKED_EXCHANGE"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "interlocked_exchange_add"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@INTERLOCKED_EXCHANGE_ADD"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "interlocked_compare_exchange"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@INTERLOCKED_COMPARE_EXCHANGE"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "strlen"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "StringNumber"}, {SEMANTIC_RULE, "@STRLEN"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "strcmp"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "StringNumber"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "StringNumber"}, {SEMANTIC_RULE, "@STRCMP"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "memcmp"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "StringNumber"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "StringNumber"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "EXPRESSION"}, {SEMANTIC_RULE, "@MEMCMP"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "wcslen"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "WstringNumber"}, {SEMANTIC_RULE, "@WCSLEN"}, {SPECIAL_TOKEN, ")"}}, + {{KEYWORD, "wcscmp"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "WstringNumber"}, {SPECIAL_TOKEN, ","}, {NON_TERMINAL, "WstringNumber"}, {SEMANTIC_RULE, "@WCSCMP"}, {SPECIAL_TOKEN, ")"}}, + {{SPECIAL_TOKEN, "("}, {NON_TERMINAL, "EXPRESSION"}, {SPECIAL_TOKEN, ")"}}, + {{NON_TERMINAL, "L_VALUE"}, {NON_TERMINAL, "E13"}}, + {{EPSILON, "eps"}}, + {{SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION"}, {SPECIAL_TOKEN, "("}, {NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER"}, {SPECIAL_TOKEN, ")"}, {SEMANTIC_RULE, "@END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE"}}, + {{SEMANTIC_RULE, "@PUSH"}, {HEX, "_hex"}}, + {{SEMANTIC_RULE, "@PUSH"}, {DECIMAL, "_decimal"}}, + {{SEMANTIC_RULE, "@PUSH"}, {OCTAL, "_octal"}}, + {{SEMANTIC_RULE, "@PUSH"}, {BINARY, "_binary"}}, + {{SEMANTIC_RULE, "@PUSH"}, {PSEUDO_REGISTER, "_pseudo_register"}}, + {{SPECIAL_TOKEN, "-"}, {NON_TERMINAL, "E12"}, {SEMANTIC_RULE, "@NEG"}}, + {{SPECIAL_TOKEN, "+"}, {NON_TERMINAL, "E12"}}, + {{SPECIAL_TOKEN, "~"}, {NON_TERMINAL, "E12"}, {SEMANTIC_RULE, "@NOT"}}, + {{SPECIAL_TOKEN, "*"}, {NON_TERMINAL, "E12"}, {SEMANTIC_RULE, "@POI"}}, + {{SPECIAL_TOKEN, "&"}, {NON_TERMINAL, "E12"}, {SEMANTIC_RULE, "@REFERENCE"}}, + {{SEMANTIC_RULE, "@PUSH"}, {STRING, "_string"}}, + {{SEMANTIC_RULE, "@PUSH"}, {WSTRING, "_wstring"}}, + {{SEMANTIC_RULE, "@PUSH"}, {GLOBAL_ID, "_global_id"}}, + {{SEMANTIC_RULE, "@PUSH"}, {LOCAL_ID, "_local_id"}}, + {{SEMANTIC_RULE, "@PUSH"}, {REGISTER, "_register"}}, + {{SEMANTIC_RULE, "@PUSH"}, {FUNCTION_PARAMETER_ID, "_function_parameter_id"}}, + {{NON_TERMINAL, "EXPRESSION"}}, + {{NON_TERMINAL, "STRING"}}, + {{NON_TERMINAL, "EXPRESSION"}}, + {{NON_TERMINAL, "WSTRING"}}}; const unsigned int RhsSize[RULES_COUNT]= { 2, diff --git a/hyperdbg/script-engine/code/script-engine.c b/hyperdbg/script-engine/code/script-engine.c index 204fbb2e..42a247a7 100644 --- a/hyperdbg/script-engine/code/script-engine.c +++ b/hyperdbg/script-engine/code/script-engine.c @@ -229,7 +229,7 @@ ScriptEngineSymbolAbortLoading() // // A wrapper for aborting download and reload // - return SymbolAbortLoading(); + SymbolAbortLoading(); } /** @@ -393,7 +393,7 @@ ScriptEngineParse(char * str) // for (int i = RhsSize[RuleId] - 1; i >= 0; i--) { - PTOKEN Token = &Rhs[RuleId][i]; + PTOKEN Token = (PTOKEN)&Rhs[RuleId][i]; if (Token->Type == EPSILON) break; @@ -2153,7 +2153,7 @@ ScriptEngineBooleanExpresssionParse( { TopToken = Top(Stack); int TerminalId = LalrGetTerminalId(CurrentIn); - StateId = DecimalToSignedInt(TopToken->Value); + StateId = (int)DecimalToSignedInt(TopToken->Value); if (StateId == INVALID || TerminalId < 0) { *Error = SCRIPT_ENGINE_ERROR_SYNTAX; @@ -2208,9 +2208,9 @@ ScriptEngineBooleanExpresssionParse( else if (Action < 0) // Reduce { StateId = -Action; - Lhs = &LalrLhs[StateId - 1]; + Lhs = (PTOKEN)&LalrLhs[StateId - 1]; RhsSize = LalrGetRhsSize(StateId - 1); - SemanticRule = &LalrSemanticRules[StateId - 1]; + SemanticRule = (PTOKEN)&LalrSemanticRules[StateId - 1]; for (int i = 0; i < 2 * RhsSize; i++) { @@ -2248,7 +2248,7 @@ ScriptEngineBooleanExpresssionParse( } Temp = Top(Stack); - StateId = DecimalToSignedInt(Temp->Value); + StateId = (int)DecimalToSignedInt(Temp->Value); Goto = LalrGotoTable[StateId][LalrGetNonTerminalId(Lhs)]; @@ -2378,7 +2378,7 @@ NewFunctionSymbol(char * FunctionName, VARIABLE_TYPE * VariableType) Symbol->Value = (unsigned long long)calloc(Length + 1, sizeof(char)); - if (Symbol->Value == NULL) + if (Symbol->Value == 0ull) { // // There was an error allocating buffer @@ -2408,7 +2408,7 @@ NewFunctionSymbol(char * FunctionName, VARIABLE_TYPE * VariableType) unsigned int GetSymbolHeapSize(PSYMBOL Symbol) { - int Temp = (3 * sizeof(unsigned long long) + Symbol->Len) / sizeof(SYMBOL) + 1; + int Temp = (3 * sizeof(unsigned long long) + (int)Symbol->Len) / sizeof(SYMBOL) + 1; return Temp; } @@ -2614,6 +2614,12 @@ PushSymbol(PSYMBOL_BUFFER SymbolBuffer, const PSYMBOL Symbol) // PSYMBOL NewHead = (PSYMBOL)malloc(NewSize * sizeof(SYMBOL)); + if (NewHead == NULL) + { + printf("err, could not allocate buffer"); + return NULL; + } + // // Copy old buffer to new buffer // @@ -2816,8 +2822,8 @@ HandleError(PSCRIPT_ENGINE_ERROR_TYPE Error, char * str) // // add the line which error happened at // - strncat(Message, (str + CurrentLineIdx), LineEnd - CurrentLineIdx); + strcat(Message, "\n"); // diff --git a/hyperdbg/script-engine/header/common.h b/hyperdbg/script-engine/header/common.h index 9752c8ae..f555e997 100644 --- a/hyperdbg/script-engine/header/common.h +++ b/hyperdbg/script-engine/header/common.h @@ -187,19 +187,19 @@ IsOctal(char c); void SetType(unsigned long long * Val, unsigned char Type); -unsigned long long int +unsigned long long DecimalToInt(char * str); -unsigned long long int +unsigned long long DecimalToSignedInt(char * str); -unsigned long long int +unsigned long long HexToInt(char * str); -unsigned long long int +unsigned long long OctalToInt(char * str); -unsigned long long int +unsigned long long BinaryToInt(char * str); void diff --git a/hyperdbg/script-engine/header/script-engine.h b/hyperdbg/script-engine/header/script-engine.h index 1749b313..119d76fc 100644 --- a/hyperdbg/script-engine/header/script-engine.h +++ b/hyperdbg/script-engine/header/script-engine.h @@ -100,7 +100,7 @@ PSYMBOL ToSymbol(PTOKEN PTOKEN, PSCRIPT_ENGINE_ERROR_TYPE Error); __declspec(dllexport) PSYMBOL_BUFFER ScriptEngineParse(char * str); -__declspec(dllimport) PSYMBOL_BUFFER GetStackBuffer(); +__declspec(dllexport) PSYMBOL_BUFFER GetStackBuffer(); void ScriptEngineBooleanExpresssionParse( diff --git a/hyperdbg/script-engine/script-engine.vcxproj b/hyperdbg/script-engine/script-engine.vcxproj index ecdd32e9..46bbecb5 100644 --- a/hyperdbg/script-engine/script-engine.vcxproj +++ b/hyperdbg/script-engine/script-engine.vcxproj @@ -64,7 +64,7 @@ pch.h MultiThreadedDebug $(SolutionDir)\script-engine\header;$(SolutionDir)\include;$(SolutionDir)\script-engine;$(SolutionDir)\script-eval;%(AdditionalIncludeDirectories) - false + true Windows diff --git a/hyperdbg/symbol-parser/code/casting.cpp b/hyperdbg/symbol-parser/code/casting.cpp index 0763c874..e17d647c 100644 --- a/hyperdbg/symbol-parser/code/casting.cpp +++ b/hyperdbg/symbol-parser/code/casting.cpp @@ -69,13 +69,13 @@ typedef struct _STUPID_STRUCT2 * safely use the details */ BOOLEAN -SymCastingQueryForFiledsAndTypes(_In_ const char * StructName, - _In_ const char * FiledOfStructName, - _Out_ PBOOLEAN IsStructNamePointerOrNot, - _Out_ PBOOLEAN IsFiledOfStructNamePointerOrNot, - _Out_ char ** NewStructOrTypeName, - _Out_ UINT32 * OffsetOfFieldFromTop, - _Out_ UINT32 * SizeOfField) +SymCastingQueryForFiledsAndTypes(const char * StructName, + const char * FiledOfStructName, + PBOOLEAN IsStructNamePointerOrNot, + PBOOLEAN IsFiledOfStructNamePointerOrNot, + char ** NewStructOrTypeName, + UINT32 * OffsetOfFieldFromTop, + UINT32 * SizeOfField) { BOOLEAN IsPointer = FALSE; BOOLEAN IsTheStructItselfAPointer = FALSE; @@ -245,7 +245,7 @@ SymCastingQueryForFiledsAndTypes(_In_ const char * StructName, * details */ BOOLEAN -SymQuerySizeof(_In_ const char * StructNameOrTypeName, _Out_ UINT32 * SizeOfField) +SymQuerySizeof(const char * StructNameOrTypeName, UINT32 * SizeOfField) { if (strcmp(StructNameOrTypeName, "STUPID_STRUCT1") == 0) { diff --git a/hyperdbg/symbol-parser/code/symbol-parser.cpp b/hyperdbg/symbol-parser/code/symbol-parser.cpp index 7f5393b9..2e619cfa 100644 --- a/hyperdbg/symbol-parser/code/symbol-parser.cpp +++ b/hyperdbg/symbol-parser/code/symbol-parser.cpp @@ -983,6 +983,13 @@ SymGetFieldOffset(CHAR * TypeName, CHAR * FieldName, UINT32 * FieldOffset) // const size_t TypeNameSize = strlen(TypeName) + 1; WCHAR * TypeNameW = (WCHAR *)malloc(sizeof(wchar_t) * TypeNameSize); + + if (TypeNameW == NULL) + { + printf("err, could not allocate buffer"); + return FALSE; + } + RtlZeroMemory(TypeNameW, sizeof(wchar_t) * TypeNameSize); mbstowcs(TypeNameW, TypeName, TypeNameSize); @@ -992,6 +999,13 @@ SymGetFieldOffset(CHAR * TypeName, CHAR * FieldName, UINT32 * FieldOffset) // const size_t FieldNameSize = strlen(FieldName) + 1; WCHAR * FieldNameW = (WCHAR *)malloc(sizeof(wchar_t) * FieldNameSize); + + if (FieldNameW == NULL) + { + printf("err, could not allocate buffer"); + return FALSE; + } + RtlZeroMemory(FieldNameW, sizeof(wchar_t) * FieldNameSize); mbstowcs(FieldNameW, FieldName, FieldNameSize); @@ -1057,6 +1071,13 @@ SymGetDataTypeSize(CHAR * TypeName, UINT64 * TypeSize) // const size_t TypeNameSize = strlen(TypeName) + 1; WCHAR * TypeNameW = (WCHAR *)malloc(sizeof(wchar_t) * TypeNameSize); + + if (TypeNameW == NULL) + { + printf("err, could not allocate buffer"); + return FALSE; + } + RtlZeroMemory(TypeNameW, sizeof(wchar_t) * TypeNameSize); mbstowcs(TypeNameW, TypeName, TypeNameSize); diff --git a/hyperdbg/symbol-parser/header/symbol-parser.h b/hyperdbg/symbol-parser/header/symbol-parser.h index 0faa038d..f5763f92 100644 --- a/hyperdbg/symbol-parser/header/symbol-parser.h +++ b/hyperdbg/symbol-parser/header/symbol-parser.h @@ -63,8 +63,8 @@ __declspec(dllexport) BOOLEAN SymConvertFileToPdbPath(const char * LocalFilePath __declspec(dllexport) BOOLEAN SymConvertFileToPdbFileAndGuidAndAgeDetails(const char * LocalFilePath, char * PdbFilePath, char * GuidAndAgeDetails, BOOLEAN Is32BitModule); __declspec(dllexport) BOOLEAN SymbolInitLoad(PVOID BufferToStoreDetails, UINT32 StoredLength, BOOLEAN DownloadIfAvailable, const char * SymbolPath, BOOLEAN IsSilentLoad); __declspec(dllexport) BOOLEAN SymShowDataBasedOnSymbolTypes(const char * TypeName, UINT64 Address, BOOLEAN IsStruct, PVOID BufferAddress, const char * AdditionalParameters); -__declspec(dllexport) BOOLEAN SymQuerySizeof(_In_ const char * StructNameOrTypeName, _Out_ UINT32 * SizeOfField); -__declspec(dllexport) BOOLEAN SymCastingQueryForFiledsAndTypes(_In_ const char * StructName, _In_ const char * FiledOfStructName, _Out_ PBOOLEAN IsStructNamePointerOrNot, _Out_ PBOOLEAN IsFiledOfStructNamePointerOrNot, _Out_ char ** NewStructOrTypeName, _Out_ UINT32 * OffsetOfFieldFromTop, _Out_ UINT32 * SizeOfField); +__declspec(dllexport) BOOLEAN SymQuerySizeof( const char * StructNameOrTypeName, UINT32 * SizeOfField); +__declspec(dllexport) BOOLEAN SymCastingQueryForFiledsAndTypes( const char * StructName, const char * FiledOfStructName, PBOOLEAN IsStructNamePointerOrNot, PBOOLEAN IsFiledOfStructNamePointerOrNot, char ** NewStructOrTypeName, UINT32 * OffsetOfFieldFromTop, UINT32 * SizeOfField); } //////////////////////////////////////////////////