HyperDbg/hyperdbg/script-engine/header/script-engine.h

123 lines
2.7 KiB
C

/**
* @file script-engine.h
* @author M.H. Gholamrezaei (mh@hyperdbg.org)
* @brief Script engine parser and codegen
* @details
* @version 0.1
* @date 2020-10-22
*
* @copyright This project is released under the GNU Public License v3.
*
*/
#pragma once
#include "type.h"
#ifndef SCRIPT_ENGINE_H
# define SCRIPT_ENGINE_H
VOID
ShowMessages(const char * Fmt, ...);
PSYMBOL
NewSymbol(void);
PSYMBOL
NewStringSymbol(PSCRIPT_ENGINE_TOKEN Token);
PSYMBOL
NewWstringSymbol(PSCRIPT_ENGINE_TOKEN Token);
unsigned int
GetSymbolHeapSize(PSYMBOL Symbol);
void
RemoveSymbol(PSYMBOL * Symbol);
PSYMBOL_BUFFER
NewSymbolBuffer(void);
PSYMBOL_BUFFER
PushSymbol(PSYMBOL_BUFFER SymbolBuffer, const PSYMBOL Symbol);
PSYMBOL
ToSymbol(PSCRIPT_ENGINE_TOKEN PTOKEN, PSCRIPT_ENGINE_ERROR_TYPE Error);
void
ScriptEngineBooleanExpresssionParse(
UINT64 BooleanExpressionSize,
PSCRIPT_ENGINE_TOKEN FirstToken,
PSCRIPT_ENGINE_TOKEN_LIST MatchedStack,
PSYMBOL_BUFFER CodeBuffer,
char * str,
char * c,
PSCRIPT_ENGINE_ERROR_TYPE Error);
UINT64
BooleanExpressionExtractEnd(char * str, BOOL * WaitForWaitStatementBooleanExpression, PSCRIPT_ENGINE_TOKEN CurrentIn);
void
CodeGen(
PSCRIPT_ENGINE_TOKEN_LIST MatchedStack,
PSYMBOL_BUFFER CodeBuffer,
PSCRIPT_ENGINE_TOKEN Operator,
PSCRIPT_ENGINE_ERROR_TYPE Error,
char** ScriptSource
);
unsigned long long int
RegisterToInt(char * str);
unsigned long long int
PseudoRegToInt(char * str);
unsigned long long int
SemanticRuleToInt(char * str);
char *
HandleError(PSCRIPT_ENGINE_ERROR_TYPE Error, char * str);
int
NewGlobalIdentifier(PSCRIPT_ENGINE_TOKEN PTOKEN);
int
GetGlobalIdentifierVal(PSCRIPT_ENGINE_TOKEN PTOKEN);
VOID
SetGlobalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token, VARIABLE_TYPE * VariableType);
VARIABLE_TYPE *
GetGlobalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token);
unsigned long long
NewLocalIdentifier(PSCRIPT_ENGINE_TOKEN PTOKEN, unsigned int VariableSize);
int
GetLocalIdentifierVal(PSCRIPT_ENGINE_TOKEN PTOKEN);
VOID
SetLocalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token, VARIABLE_TYPE * VariableType);
VARIABLE_TYPE *
GetLocalIdentifierVariableType(PSCRIPT_ENGINE_TOKEN Token);
int
NewFunctionParameterIdentifier(PSCRIPT_ENGINE_TOKEN Token);
int
GetFunctionParameterIdentifier(PSCRIPT_ENGINE_TOKEN Token);
int
LalrGetRhsSize(int RuleId);
BOOL
LalrIsOperandType(PSCRIPT_ENGINE_TOKEN PTOKEN);
PUSER_DEFINED_FUNCTION_NODE
GetUserDefinedFunctionNode(PSCRIPT_ENGINE_TOKEN Token);
BOOLEAN
FuncGetNumberOfOperands(UINT64 FuncType, UINT32 * NumberOfGetOperands, UINT32 * NumberOfSetOperands);
#endif