private void SetDataRegion(string regionSpecifier, ITargetConnector connector)
        {
            KeyValuePair<string, string>? regionSpecifierPair = StringHelper.SplitToKeyValue (regionSpecifier, "|");
            if (regionSpecifierPair == null)
                throw new FuzzParseException ("DataRegion contains invalid formatted specifier '{0}'", regionSpecifier);

            switch (regionSpecifierPair.Value.Key)
            {
            case "variable":
                _fuzzTarget = connector.SymbolTable.CreateVariable (regionSpecifierPair.Value.Value, 8);
                break;
            case "address":
                UInt64 address;
                if (regionSpecifierPair.Value.Value.StartsWith ("0x", StringComparison.InvariantCultureIgnoreCase) &&
                    UInt64.TryParse (regionSpecifierPair.Value.Value.Substring (2), NumberStyles.HexNumber, NumberFormatInfo.InvariantInfo, out address))
                    _fuzzTarget = connector.SymbolTable.CreateVariable (new StaticAddress (address), 8);
                else
                    throw new FuzzParseException ("Cannot parse address in format '{0}' use '0x12345678'", regionSpecifierPair.Value.Value);
                break;
            case "calc":
                _fuzzTarget = connector.SymbolTable.CreateCalculatedVariable (regionSpecifierPair.Value.Value, 8);
                break;

            case "cstyle_reference_operator":
                _fuzzTarget = connector.SymbolTable.CreateCStyleReferenceOperatorVariable(regionSpecifierPair.Value.Value, 8);
                break;
            default:
                throw new FuzzParseException ("Invalid data region specifier '{0}'", regionSpecifierPair.Value.Key);
            }
        }
Пример #2
0
 public SymbolTableMethod(ISymbolTable symbolTable, string name, ISymbolTableVariable[] parameters)
 {
     _symbolTable = symbolTable;
     _name = name;
     _parameters = parameters;
 }