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}"; } } }