Esempio n. 1
0
        public void pointerTest1()
        {
            string managed = " my string 123 ";

            UnmanagedString uns, uns2;

            using (uns = new UnmanagedString(managed, UnmanagedString.SType.Unicode))
            {
                IntPtr ptr = uns;

                using (uns2 = new UnmanagedString(ptr, uns.Type))
                {
                    Assert.Equal(uns.Pointer, uns2.Pointer);
                    Assert.Equal(uns.Type, uns2.Type);

                    Assert.False(uns2.Owner);
                    Assert.True(uns.Owner);

                    Assert.Equal(managed.Length, uns2.Data.Length);
                    Assert.Equal(managed, uns2.Data);
                }
            }

            Assert.Equal(IntPtr.Zero, (IntPtr)uns);
            Assert.Equal(IntPtr.Zero, (IntPtr)uns2);
        }
Esempio n. 2
0
        public void GetStringLengthTest3()
        {
            const int BSIZE   = 2;
            string    managed = " my string 123 ";

            using (var uns = new UnmanagedString(managed, UnmanagedString.SType.BSTR)) {
                IntPtr ptr = uns;
                Assert.AreEqual(managed.Length * BSIZE, ptr.GetStringLength(BSIZE));
            }
        }
Esempio n. 3
0
        public void allocFreeTest2()
        {
            string managed = " my string 123 ";

            UnmanagedString uns;

            using (uns = new UnmanagedString(managed, UnmanagedString.SType.Unicode)) {
                WCharPtr actual = uns;
                Assert.AreEqual(managed.Length, ((string)actual).Length);
                Assert.AreEqual(UnmanagedString.SType.Unicode, uns.Type);
            }

            Assert.AreEqual(IntPtr.Zero, (IntPtr)uns);
        }
Esempio n. 4
0
        public void allocFreeTest3()
        {
            string managed = " my string 123 ";

            UnmanagedString uns;

            using (uns = new UnmanagedString(managed, UnmanagedString.SType.BSTR)) {
                BSTR actual = uns;
                Assert.Equal(managed.Length, ((string)actual).Length);
                Assert.Equal(UnmanagedString.SType.BSTR, uns.Type);
            }

            Assert.Equal(IntPtr.Zero, (IntPtr)uns);
        }
Esempio n. 5
0
 public static bool GetDUOFirmwareBuild(IntPtr duo, ref string val)
 {
     try
     {
         UnmanagedString str = new UnmanagedString();
         if (DUOLibInternal.DUOGetFirmwareBuild(duo, str.Pointer))
         {
             val = str.String;
             return(true);
         }
         else
         {
             return(false);
         }
     }
     catch { return(false); }
 }
Esempio n. 6
0
        public void echoTest5()
        {
            using (var l = new ConariL(UNLIB_DLL))
            {
                string exp = "my string-123 !";

                using (var uns = new UnmanagedString(exp, UnmanagedString.SType.Unicode))
                {
                    WCharPtr wchrptr = uns;

                    Assert.AreEqual(exp, l.DLR.get_WStringPtrVal <WCharPtr>(wchrptr));
                    Assert.AreEqual(exp, l.bind <Func <WCharPtr, WCharPtr> >("get_WStringPtrVal")(wchrptr));

                    var dyn = l.bind(Dynamic.GetMethodInfo(typeof(WCharPtr), typeof(WCharPtr)), "get_WStringPtrVal");
                    Assert.AreEqual(exp, (WCharPtr)dyn.dynamic.Invoke(null, new object[] { wchrptr }));
                }
            }
        }
Esempio n. 7
0
        public void echoTest3()
        {
            using (var l = new ConariL(UNLIB_DLL))
            {
                string exp = "my string-123 !";

                using (var uns = new UnmanagedString(exp, UnmanagedString.SType.BSTR))
                {
                    BSTR bstr = uns;

                    Assert.AreEqual(exp, l.DLR.get_BSTRVal <BSTR>(bstr));
                    Assert.AreEqual(exp, l.bind <Func <BSTR, BSTR> >("get_BSTRVal")(bstr));

                    var dyn = l.bind(Dynamic.GetMethodInfo(typeof(BSTR), typeof(BSTR)), "get_BSTRVal");
                    Assert.AreEqual(exp, (BSTR)dyn.dynamic.Invoke(null, new object[] { bstr }));
                }
            }
        }
Esempio n. 8
0
        public void echoTest1()
        {
            using (var l = new ConariL(UNLIB_DLL))
            {
                string exp = "my string-123 !";

                using (var uns = new UnmanagedString(exp, UnmanagedString.SType.Ansi))
                {
                    CharPtr chrptr = uns;

                    Assert.AreEqual(exp, l.DLR.get_CharPtrVal <CharPtr>(chrptr));
                    Assert.AreEqual(exp, l.bind <Func <CharPtr, CharPtr> >("get_CharPtrVal")(chrptr));

                    var dyn = l.bind(Dynamic.GetMethodInfo(typeof(CharPtr), typeof(CharPtr)), "get_CharPtrVal");
                    Assert.AreEqual(exp, (CharPtr)dyn.dynamic.Invoke(null, new object[] { chrptr }));
                }
            }
        }
Esempio n. 9
0
        public void tryAlgo(string data, string filter)
        {
            using (IConari l = new ConariL("regXwild.dll"))
            {
                using (var uData = new UnmanagedString(data, UnmanagedString.SType.Unicode))
                    using (var uFilter = new UnmanagedString(filter, UnmanagedString.SType.Unicode))
                    {
                        Console.WriteLine($"Unicode: true \niterations({iterations}) x average({average})\n");

                        var alg = new Algorithms();

                        calcAlgo(" regXwild via Conari (Lambda) - ESS version: ", l, uData, uFilter, alg.regXwildEssLambda);
                        calcAlgo(" regXwild via Conari (DLR)- ESS version: ", l, uData, uFilter, alg.regXwildEssDLR);
                        calcAlgo(" regXwild via Conari (Lambda) - EXT version: ", l, uData, uFilter, alg.regXwildExtLambda);
                        calcAlgo(" regXwild via Conari (DLR) - EXT version: ", l, uData, uFilter, alg.regXwildExtDLR);
                    }
            }
        }
Esempio n. 10
0
            public static int CompareOrdinal(UnmanagedString strA, Span <byte> strB)
            {
                if (strA.IsNull && strB == null)
                {
                    return(0);
                }

                if (strB == null)
                {
                    return(1);
                }

                if (strA.IsNull)
                {
                    return(-1);
                }

                return(strA.StringAsBytes.SequenceCompareTo(strB));
            }
Esempio n. 11
0
        public void GetStringBytesTest1()
        {
            string managed = " mystring ";

            using (var uns = new UnmanagedString(managed, UnmanagedString.SType.Ansi)) {
                IntPtr ptr = uns;

                Assert.AreEqual(0, ptr.GetStringBytes(-1).Length);
                Assert.AreEqual(0, ptr.GetStringBytes(0).Length);
                Assert.AreEqual(5, ptr.GetStringBytes(5).Length);

                var a = Encoding.UTF8.GetBytes(managed).Take(3).ToArray();
                var b = ptr.GetStringBytes(3);

                Assert.AreEqual(a[0], b[0]);
                Assert.AreEqual(a[1], b[1]);
                Assert.AreEqual(a[2], b[2]);
            }
        }
Esempio n. 12
0
        public void stringTest3()
        {
            using (var l = new ConariL(gCfgUnlib))
            {
                string exp = "mystring-123 !";

                using (var uns1 = new UnmanagedString(exp, UnmanagedString.SType.Ansi))
                    using (var uns2 = new UnmanagedString(exp, UnmanagedString.SType.Ansi))
                        using (var uns3 = new UnmanagedString(" " + exp, UnmanagedString.SType.Ansi))
                        {
                            CharPtr chrptr  = uns1;
                            CharPtr chrptr2 = uns2;

                            Assert.Equal(true, l.DLR.get_StringPtrCmpRef <bool>(chrptr, chrptr2));
                            Assert.True(l.bind <Func <CharPtr, CharPtr, bool> >("get_StringPtrCmpRef")(chrptr, chrptr2));

                            Assert.Equal(false, l.DLR.get_StringPtrCmpRef <bool>(chrptr, (CharPtr)uns3));
                        }
            }
        }
Esempio n. 13
0
        public void stringTest2()
        {
            using (var l = new ConariL(gCfgUnlib))
            {
                string exp = "mystring-123 !";

                using (var uns1 = new UnmanagedString(exp, UnmanagedString.SType.Unicode))
                    using (var uns2 = new UnmanagedString(exp, UnmanagedString.SType.Unicode))
                        using (var uns3 = new UnmanagedString(" " + exp, UnmanagedString.SType.Unicode))
                        {
                            WCharPtr wchrptr  = uns1;
                            WCharPtr wchrptr2 = uns2;

                            Assert.Equal(true, l.DLR.get_WCharPtrCmpRef <bool>(wchrptr, wchrptr2));
                            Assert.True(l.bind <Func <WCharPtr, WCharPtr, bool> >("get_WCharPtrCmpRef")(wchrptr, wchrptr2));

                            Assert.Equal(false, l.DLR.get_WCharPtrCmpRef <bool>(wchrptr, (WCharPtr)uns3));
                        }
            }
        }
Esempio n. 14
0
        public void stringTest4()
        {
            using (var l = new ConariL(UNLIB_DLL))
            {
                string exp = "mystring-123 !";

                using (var uns1 = new UnmanagedString(exp, UnmanagedString.SType.Unicode))
                    using (var uns2 = new UnmanagedString(exp, UnmanagedString.SType.Unicode))
                        using (var uns3 = new UnmanagedString(" " + exp, UnmanagedString.SType.Unicode))
                        {
                            WCharPtr chrptr  = uns1;
                            WCharPtr chrptr2 = uns2;

                            Assert.AreEqual(true, l.DLR.get_WStringPtrCmpRef <bool>(chrptr, chrptr2));
                            Assert.AreEqual(true, l.bind <Func <WCharPtr, WCharPtr, bool> >("get_WStringPtrCmpRef")(chrptr, chrptr2));

                            Assert.AreEqual(false, l.DLR.get_WStringPtrCmpRef <bool>(chrptr, (WCharPtr)uns3));
                        }
            }
        }
Esempio n. 15
0
        public static unsafe ReadOnlySpan <char> AsSpan(this UnmanagedString @this)
        {
            char *ptr = @this.GetInternalPointer();

            return(new ReadOnlySpan <char>(ptr, @this.Length));
        }
Esempio n. 16
0
        public static string SymbolToString(SymbolData symbol, uint symbolLoadFailure)
        {
            switch (symbol.BaseAddress.ToBytes)
            {
            case 0:
                if (symbol.SymbolName.EqualsCaseInsensitiveInvariant(rootString))
                {
                    return("[Root]");
                }
                return("?!?");

            case 1:
                return("");

            case 2:
                return("n/a");

            case 3:
                return("[Idle]");
            }

            var isJittedSymbol = symbol.ProcessImageData.UsageType == 4;

            var sb = s_builder.Value;

            sb.Clear();
            UnmanagedString moduleName = symbol.ProcessImageData.ImageName.FileName;

            if (!moduleName.HasValue)
            {
                moduleName = symbol.SymbolImageData.OriginalFileName;
            }

            var moduleSpan = moduleName.AsSpan();

            if (!isJittedSymbol && moduleSpan.EndsWith(".ni.dll".AsSpan(), StringComparison.Ordinal))
            {
                isJittedSymbol = true;
                moduleSpan     = moduleSpan.Slice(0, moduleSpan.Length - 7);
            }

            if (isJittedSymbol && (moduleSpan.EndsWith(".dll".AsSpan(), StringComparison.OrdinalIgnoreCase) || moduleSpan.EndsWith(".exe".AsSpan(), StringComparison.OrdinalIgnoreCase)))
            {
                moduleSpan = moduleSpan.Slice(0, moduleSpan.Length - 4);
            }

            sb.Append(moduleSpan);
            if (moduleSpan.IsEmpty)
            {
                sb.Append('?');
            }
            sb.Append('!');
            if (symbolLoadFailure > 0)
            {
                sb.Append('<');
                DecodedSymbol.SymbolLoadFailureDictionary.TryGetValue(symbolLoadFailure, out var failure);
                sb.Append(failure ?? "Unknown failure");
                sb.Append('>');
                return(sb.ToString());
            }

            var functionName = symbol.SymbolName.AsSpan();

            if (functionName.IsEmpty)
            {
                sb.Append(symbol.BaseAddress.ToBytes.ToString("X"));
            }
            else
            {
                if (isJittedSymbol)
                {
                    if (functionName.StartsWith(moduleSpan, StringComparison.Ordinal))
                    {
                        functionName = functionName.Slice(moduleSpan.Length);
                        functionName = functionName.TrimStart('.');
                    }
                    if (functionName.EndsWith(" 0x0".AsSpan(), StringComparison.Ordinal))
                    {
                        functionName = functionName.Slice(0, functionName.Length - 4);
                    }
                    ProcessString(functionName, sb);
                }
                else
                {
                    sb.Append(functionName);
                }
            }
            return(sb.ToString());
        }
Esempio n. 17
0
 public static int CompareOrdinal(Span <byte> strA, UnmanagedString strB)
 {
     return(-CompareOrdinal(strB, strA));
 }