示例#1
0
        public ATokenType GetTokenType(ref String token, String token2)
        {
            var result = ATokenType.Invalid;

            if (token.Length == 0)
            {
                return(result);
            }
            result = TokenToRegisterBit(token);
            // filter these 2 words
            token = UStringUtils.Replace(token, "LONG ", "", true);
            token = UStringUtils.Replace(token, "SHORT ", "", true);
            token = UStringUtils.Replace(token, "FAR ", "", true);
            var temp = AStringUtils.ConvertHexStrToRealStr(token);

            AStringUtils.Val(temp, out UInt64 _, out var err);
            if (err == 0)
            {
                result = ATokenType.Value;
                token  = temp;
            }
            var brp = AStringUtils.Pos("[", token);

            if (brp != -1)
            {
                if (UStringUtils.IndexOf(token, "YMMWORD", 0, brp) != -1)
                {
                    result = ATokenType.MemoryLocation256;
                }
                else if (UStringUtils.IndexOf(token, "XMMWORD", 0, brp) != -1)
                {
                    result = ATokenType.MemoryLocation128;
                }
                else if (UStringUtils.IndexOf(token, "DQWORD", 0, brp) != -1)
                {
                    result = ATokenType.MemoryLocation128;
                }
                else if (UStringUtils.IndexOf(token, "TBYTE", 0, brp) != -1)
                {
                    result = ATokenType.MemoryLocation80;
                }
                else if (UStringUtils.IndexOf(token, "TWORD", 0, brp) != -1)
                {
                    result = ATokenType.MemoryLocation80;
                }
                else if (UStringUtils.IndexOf(token, "QWORD", 0, brp) != -1)
                {
                    result = ATokenType.MemoryLocation64;
                }
                else if (UStringUtils.IndexOf(token, "DWORD", 0, brp) != -1)
                {
                    result = ATokenType.MemoryLocation32;
                }
                else if (UStringUtils.IndexOf(token, "WORD", 0, brp) != -1)
                {
                    result = ATokenType.MemoryLocation16;
                }
                else if (UStringUtils.IndexOf(token, "BYTE", 0, brp) != -1)
                {
                    result = ATokenType.MemoryLocation8;
                }
                else
                {
                    result = ATokenType.MemoryLocation;
                }
            }
            if (result == ATokenType.MemoryLocation)
            {
                if (token2 == "")
                {
                    result = ATokenType.MemoryLocation32;
                    return(result);
                }
                // I need the helper param to figure it out
                switch (TokenToRegisterBit(token2))
                {
                case ATokenType.Register8Bit:
                case ATokenType.Register8BitWithPrefix:
                    result = ATokenType.MemoryLocation8;
                    break;

                case ATokenType.RegisterSReg:
                case ATokenType.Register16Bit:
                    result = ATokenType.MemoryLocation16;
                    break;

                case ATokenType.Register64Bit:
                    result = ATokenType.MemoryLocation64;
                    break;

                default:
                    result = ATokenType.MemoryLocation32;
                    break;
                }
            }
            return(result);
        }
示例#2
0
 public static int PosEx(String needle, String str, int start)
 {
     return(UStringUtils.IndexOf(str, needle, start));
 }
示例#3
0
 public static int PosEx(Char needle, String str, int start)
 {
     return(UStringUtils.IndexOf(str, needle.ToString(), start));
 }
示例#4
0
 public static int Pos(String needle, String str, Boolean ignoreCase)
 {
     return(UStringUtils.IndexOf(str, needle, ignoreCase));
 }
示例#5
0
 public static int Pos(String needle, String str)
 {
     return(UStringUtils.IndexOf(str, needle));
 }
示例#6
0
 public static int Pos(Char needle, String str)
 {
     return(UStringUtils.IndexOf(str, needle.ToString()));
 }