mirror of
https://github.com/HyperDbg/HyperDbg
synced 2026-08-15 06:29:09 -04:00
Update string as parameter for string functions in script engine
This commit is contained in:
parent
3b5e361189
commit
717b369a5c
9 changed files with 1032 additions and 752 deletions
|
|
@ -1461,6 +1461,85 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS
|
|||
|
||||
RemoveTokenList(TempStack);
|
||||
}
|
||||
else if (IsType9Func(Operator))
|
||||
{
|
||||
PushSymbol(CodeBuffer, OperatorSymbol);
|
||||
Op0 = Pop(MatchedStack);
|
||||
Op0Symbol = ToSymbol(Op0, Error);
|
||||
|
||||
Temp = NewTemp(Error);
|
||||
Push(MatchedStack, Temp);
|
||||
TempSymbol = ToSymbol(Temp, Error);
|
||||
|
||||
PushSymbol(CodeBuffer, Op0Symbol);
|
||||
PushSymbol(CodeBuffer, TempSymbol);
|
||||
|
||||
FreeTemp(Op0);
|
||||
if (*Error != SCRIPT_ENGINE_ERROR_FREE)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (IsType10Func(Operator))
|
||||
{
|
||||
PushSymbol(CodeBuffer, OperatorSymbol);
|
||||
Op0 = Pop(MatchedStack);
|
||||
Op0Symbol = ToSymbol(Op0, Error);
|
||||
|
||||
Op1 = Pop(MatchedStack);
|
||||
Op1Symbol = ToSymbol(Op1, Error);
|
||||
|
||||
PushSymbol(CodeBuffer, Op0Symbol);
|
||||
PushSymbol(CodeBuffer, Op1Symbol);
|
||||
if (*Error != SCRIPT_ENGINE_ERROR_FREE)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
Temp = NewTemp(Error);
|
||||
Push(MatchedStack, Temp);
|
||||
TempSymbol = ToSymbol(Temp, Error);
|
||||
PushSymbol(CodeBuffer, TempSymbol);
|
||||
|
||||
//
|
||||
// Free the operand if it is a temp value
|
||||
//
|
||||
FreeTemp(Op0);
|
||||
FreeTemp(Op1);
|
||||
}
|
||||
else if (IsType11Func(Operator))
|
||||
{
|
||||
PushSymbol(CodeBuffer, OperatorSymbol);
|
||||
Op0 = Pop(MatchedStack);
|
||||
Op0Symbol = ToSymbol(Op0, Error);
|
||||
|
||||
Op1 = Pop(MatchedStack);
|
||||
Op1Symbol = ToSymbol(Op1, Error);
|
||||
|
||||
PTOKEN Op2 = Pop(MatchedStack);
|
||||
PSYMBOL Op2Symbol = ToSymbol(Op2, Error);
|
||||
|
||||
PushSymbol(CodeBuffer, Op0Symbol);
|
||||
PushSymbol(CodeBuffer, Op1Symbol);
|
||||
PushSymbol(CodeBuffer, Op2Symbol);
|
||||
|
||||
Temp = NewTemp(Error);
|
||||
Push(MatchedStack, Temp);
|
||||
TempSymbol = ToSymbol(Temp, Error);
|
||||
PushSymbol(CodeBuffer, TempSymbol);
|
||||
|
||||
FreeTemp(Op2);
|
||||
|
||||
//
|
||||
// Free the operand if it is a temp value
|
||||
//
|
||||
FreeTemp(Op0);
|
||||
FreeTemp(Op1);
|
||||
if (*Error != SCRIPT_ENGINE_ERROR_FREE)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*Error = SCRIPT_ENGINE_ERROR_UNHANDLED_SEMANTIC_RULE;
|
||||
|
|
@ -2339,6 +2418,9 @@ LalrIsOperandType(PTOKEN Token)
|
|||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
else if (Token->Type == STRING)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue