示例#1
0
void EvalAssign( std::stack<TokenEval> &varStack, std::vector<TokenEval> &callStack )
{
    Variable src;
    TokenEval dst;
    src = varStack.top().v;
    varStack.pop();
    dst  = varStack.top();
    varStack.pop();

    if( dst.vPtr != NULL )
    {
        if( dst.type == TokenEval::VARIABLE )
        {
            *(dst.vPtr) = src;
            varStack.push(TokenEval(*(dst.vPtr), dst.vPtr));
        }
        else if( dst.type == TokenEval::UCHAR )
        {
            unsigned char *dstChar;
            dstChar = (unsigned char *)dst.vPtr;
            *dstChar = src.AsValue();
            varStack.push(TokenEval(*dstChar, dstChar, TokenEval::UCHAR));
        }
    }
    else
    {
        WriteAddress( (LPVOID)dst.v.AsValue(), &src, 4 );
    }
}
示例#2
0
void EvalDereference( std::stack<TokenEval> &varStack, std::vector<TokenEval> &callStack )
{
    Variable dst;
    dst = varStack.top().v;
    varStack.pop();
    dst = ReadAddress((LPCVOID)dst.AsValue());
    varStack.push(TokenEval(dst, NULL));
}
示例#3
0
void EvalRightBracket( std::stack<TokenEval> &varStack, std::vector<TokenEval> &callStack )
{
    Variable src;
    Variable *dst;
    src = varStack.top().v;
    varStack.pop();
    dst = varStack.top().vPtr;
    varStack.pop();

    if( dst != NULL )
    {
        varStack.push( TokenEval(dst->operatorSplit(src.AsValue()), &(*dst)[src.AsValue()], 
            TokenEval::UCHAR) );
    }
    else
    {
        varStack.push(TokenEval(0, NULL));
    }
}