コード例 #1
0
            public ZephyrThread(ZephyrThreadProvider provider, ulong threadObjectAddress, IGlobalExpressionEvaluator evaluator, bool isCurrentlyExecuting = false)
            {
                IsCurrentlyExecuting = isCurrentlyExecuting;
                _Provider            = provider;
                _ThreadObjectAddress = threadObjectAddress;
                _Evaluator           = evaluator;

                UniqueID = (int)threadObjectAddress;

                var name = evaluator.EvaluateStringExpression($"(char *)&(((struct k_thread *)0x{threadObjectAddress:x8})->name)");

                if (!string.IsNullOrEmpty(name))
                {
                    Name = name;
                }
                else
                {
                    var sym = evaluator.TryGetMeaningulSymbolName(threadObjectAddress);
                    if (sym.Symbol != null && sym.Offset == 0)
                    {
                        Name = sym.Symbol;
                    }
                    else
                    {
                        Name = $"0x{threadObjectAddress:x8}";
                    }
                }
            }
コード例 #2
0
            public RTXThread(RTXThreadProvider provider, ulong threadObjectAddress, IGlobalExpressionEvaluator evaluator, bool isCurrentlyExecuting = false)
            {
                IsCurrentlyExecuting = isCurrentlyExecuting;
                _Provider            = provider;
                _ThreadObjectAddress = threadObjectAddress;
                _Evaluator           = evaluator;

                UniqueID = (int)threadObjectAddress;    //RTX threads don't have meaningful sequential IDs

                Name = evaluator.EvaluateStringExpression(GetFieldExpression("name")) ?? "(unnamed)";
            }