__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
#! /usr/bin/python3
#
# argdist Trace a function and display a distribution of its
# parameter values as a histogram or frequency count.
#
# USAGE: argdist [-h] [-p PID] [-z STRING_SIZE] [-i INTERVAL] [-n COUNT] [-v]
# [-c] [-T TOP] [-C specifier] [-H specifier] [-I header]
# [-t TID]
#
# Licensed under the Apache License, Version 2.0 (the "License")
# Copyright (C) 2016 Sasha Goldshtein.
from bcc import BPF, USDT, StrcmpRewrite
from time import sleep, strftime
import argparse
import re
import traceback
import os
import sys
class Probe(object):
next_probe_index = 0
streq_index = 0
aliases = {"$PID": "(bpf_get_current_pid_tgid() >> 32)", "$COMM": "&val.name"}
def _substitute_aliases(self, expr):
if expr is None:
return expr
for alias, subst in Probe.aliases.items():
expr = expr.replace(alias, subst)
return expr
def _parse_signature(self):
params = map(str.strip, self.signature.split(','))
self.param_types = {}
for param in params:
# If the type is a pointer, the * can be next to the
# param name. Other complex types like arrays are not
# supported right now.
index = param.rfind('*')
index = index if index != -1 else param.rfind(' ')
param_type = param[0:index + 1].strip()
param_name = param[index + 1:].strip()
self.param_types[param_name] = param_type
# Maintain list of user params. Then later decide to
# switch to bpf_probe_read_kernel or bpf_probe_read_user.
if "__user" in param_type.split():
self.probe_user_list.add(param_name)
def _generate_entry(self):
self.entry_probe_func = self.probe_func_name + "_entry"
text = """
int PROBENAME(struct pt_regs *ctx SIGNATURE)
{
u64 __pid_tgid = bpf_get_current_pid_tgid();
u32 __pid = __pid_tgid; // lower 32 bits
u32 __tgid = __pid_tgid >> 32; // upper 32 bits
PID_FILTER
TID_FILTER
COLLECT
return 0;
}
"""
text = text.replace("PROBENAME", self.entry_probe_func)
text = text.replace("SIGNATURE",
"" if len(self.signature) == 0 else ", " + self.signature)
text = text.replace("PID_FILTER", self._generate_pid_filter())
text = text.replace("TID_FILTER", self._generate_tid_filter())
collect = ""
for pname in self.args_to_probe:
param_hash = self.hashname_prefix + pname
if pname == "__latency":
collect += """
u64 __time = bpf_ktime_get_ns();
%s.update(&__pid, &__time);
""" % param_hash
else:
collect += "%s.update(&__pid, &%s);\n" % \
(param_hash, pname)
text = text.replace("COLLECT", collect)
return text
def _generate_entry_probe(self):
# Any $entry(name) expressions result in saving that argument
# when entering the function.
self.args_to_probe = set()
regex = r"\$entry\((\w+)\)"
for expr in self.exprs:
for arg in re.finditer(regex, expr):
self.args_to_probe.add(arg.group(1))
for arg in re.finditer(regex, self.filter):
self.args_to_probe.add(arg.group(1))
if any(map(lambda expr: "$latency" in expr, self.exprs)) or \
"$latency" in self.filter:
self.args_to_probe.add("__latency")
self.param_types["__latency"] = "u64" # nanoseconds
for pname in self.args_to_probe:
if pname not in self.param_types:
raise ValueError("$entry(%s): no such param" %
arg)
self.hashname_prefix = "%s_param_" % self.probe_hash_name
text = ""
for pname in self.args_to_probe:
# Each argument is stored in a separate hash that is
# keyed by pid.
text += "BPF_HASH(%s, u32, %s);\n" % \
(self.hashname_prefix + pname,
self.param_types[pname])
text += self._generate_entry()
return text
def _generate_retprobe_prefix(self):
# After we're done here, there are __%s_val variables for each
# argument we needed to probe using $entry(name), and they all
# have values (which isn't necessarily the case if we missed
# the method entry probe).
text = ""
self.param_val_names = {}
for pname in self.args_to_probe:
val_name = "__%s_val" % pname
text += "%s *%s = %s.lookup(&__pid);\n" % \
(self.param_types[pname], val_name,
self.hashname_prefix + pname)
text += "if (%s == 0) { return 0 ; }\n" % val_name
self.param_val_names[pname] = val_name
return text
def _generate_comm_prefix(self):
text = """
struct val_t {
u32 pid;
char name[sizeof(struct __string_t)];
};
struct val_t val = {.pid = (bpf_get_current_pid_tgid() >> 32) };
bpf_get_current_comm(&val.name, sizeof(val.name));
"""
return text
def _replace_entry_exprs(self):
for pname, vname in self.param_val_names.items():
if pname == "__latency":
entry_expr = "$latency"
val_expr = "(bpf_ktime_get_ns() - *%s)" % vname
else:
entry_expr = "$entry(%s)" % pname
val_expr = "(*%s)" % vname
for i in range(0, len(self.exprs)):
self.exprs[i] = self.exprs[i].replace(
entry_expr, val_expr)
self.filter = self.filter.replace(entry_expr,
val_expr)
def _attach_entry_probe(self):
if self.is_user:
self.bpf.attach_uprobe(name=self.library,
sym=self.function,
fn_name=self.entry_probe_func,
pid=self.pid or -1)
else:
self.bpf.attach_kprobe(event=self.function,
fn_name=self.entry_probe_func)
def _bail(self, error):
raise ValueError("error parsing probe '%s': %s" %
(self.raw_spec, error))
def _validate_specifier(self):
# Everything after '#' is the probe label, ignore it
spec = self.raw_spec.split('#')[0]
parts = spec.strip().split(':')
if len(parts) < 3:
self._bail("at least the probe type, library, and " +
"function signature must be specified")
if len(parts) > 6:
self._bail("extraneous ':'-separated parts detected")
if parts[0] not in ["r", "p", "t", "u"]:
self._bail("probe type must be 'p', 'r', 't', or 'u'" +
" but got '%s'" % parts[0])
if re.match(r"\S+\(.*\)", parts[2]) is None:
self._bail(("function signature '%s' has an invalid " +
"format") % parts[2])
def _parse_expr_types(self, expr_types):
if len(expr_types) == 0:
self._bail("no expr types specified")
self.expr_types = expr_types.split(',')
def _parse_exprs(self, exprs):
if len(exprs) == 0:
self._bail("no exprs specified")
self.exprs = exprs.split(',')
def _make_valid_identifier(self, ident):
return re.sub(r'[^A-Za-z0-9_]', '_', ident)
def __init__(self, tool, type, specifier):
self.usdt_ctx = None
self.streq_functions = ""
self.pid = tool.args.pid
self.tid = tool.args.tid
self.cumulative = tool.args.cumulative or False
self.raw_spec = specifier
self.probe_user_list = set()
self.bin_cmp = False
self._validate_specifier()
spec_and_label = specifier.split('#')
self.label = spec_and_label[1] \
if len(spec_and_label) == 2 else None
parts = spec_and_label[0].strip().split(':')
self.type = type # hist or freq
self.probe_type = parts[0]
fparts = parts[2].split('(')
self.function = fparts[0].strip()
if self.probe_type == "t":
self.library = "" # kernel
self.tp_category = parts[1]
self.tp_event = self.function
elif self.probe_type == "u":
self.library = parts[1]
self.probe_func_name = self._make_valid_identifier(
"%s_probe%d" %
(self.function, Probe.next_probe_index))
self._enable_usdt_probe()
else:
self.library = parts[1]
self.is_user = len(self.library) > 0
self.signature = fparts[1].strip()[:-1]
self._parse_signature()
# If the user didn't specify an expression to probe, we probe
# the retval in a ret probe, or simply the value "1" otherwise.
self.is_default_expr = len(parts) < 5
if not self.is_default_expr:
self._parse_expr_types(parts[3])
self._parse_exprs(parts[4])
if len(self.exprs) != len(self.expr_types):
self._bail("mismatched # of exprs and types")
if self.type == "hist" and len(self.expr_types) > 1:
self._bail("histograms can only have 1 expr")
else:
if not self.probe_type == "r" and self.type == "hist":
self._bail("histograms must have expr")
self.expr_types = \
["u64" if not self.probe_type == "r" else "int"]
self.exprs = \
["1" if not self.probe_type == "r" else "$retval"]
self.filter = "" if len(parts) != 6 else parts[5]
self._substitute_exprs()
# Do we need to attach an entry probe so that we can collect an
# argument that is required for an exit (return) probe?
def check(expr):
keywords = ["$entry", "$latency"]
return any(map(lambda kw: kw in expr, keywords))
self.entry_probe_required = self.probe_type == "r" and \
(any(map(check, self.exprs)) or check(self.filter))
self.probe_func_name = self._make_valid_identifier(
"%s_probe%d" %
(self.function, Probe.next_probe_index))
self.probe_hash_name = self._make_valid_identifier(
"%s_hash%d" %
(self.function, Probe.next_probe_index))
Probe.next_probe_index += 1
def _enable_usdt_probe(self):
self.usdt_ctx = USDT(path=self.library, pid=self.pid)
self.usdt_ctx.enable_probe(
self.function, self.probe_func_name)
def _substitute_exprs(self):
def repl(expr):
expr = self._substitute_aliases(expr)
rdict = StrcmpRewrite.rewrite_expr(expr,
self.bin_cmp, self.library,
self.probe_user_list, self.streq_functions,
Probe.streq_index)
expr = rdict["expr"]
self.streq_functions = rdict["streq_functions"]
Probe.streq_index = rdict["probeid"]
return expr.replace("$retval", "PT_REGS_RC(ctx)")
for i in range(0, len(self.exprs)):
self.exprs[i] = repl(self.exprs[i])
self.filter = repl(self.filter)
def _is_string(self, expr_type):
return expr_type == "char*" or expr_type == "char *"
def _generate_hash_field(self, i):
if self._is_string(self.expr_types[i]):
return "struct __string_t v%d;\n" % i
else:
return "%s v%d;\n" % (self.expr_types[i], i)
def _generate_usdt_arg_assignment(self, i):
expr = self.exprs[i]
if self.probe_type == "u" and expr[0:3] == "arg":
arg_index = int(expr[3])
arg_ctype = self.usdt_ctx.get_probe_arg_ctype(
self.function, arg_index - 1)
return (" %s %s = 0;\n" +
" bpf_usdt_readarg(%s, ctx, &%s);\n") \
% (arg_ctype, expr, expr[3], expr)
else:
return ""
def _generate_field_assignment(self, i):
text = self._generate_usdt_arg_assignment(i)
if self._is_string(self.expr_types[i]):
if self.is_user or \
self.exprs[i] in self.probe_user_list:
probe_readfunc = "bpf_probe_read_user"
else:
probe_readfunc = "bpf_probe_read_kernel"
return (text + " %s(&__key.v%d.s," +
" sizeof(__key.v%d.s), (void *)%s);\n") % \
(probe_readfunc, i, i, self.exprs[i])
else:
return text + " __key.v%d = %s;\n" % \
(i, self.exprs[i])
def _generate_hash_decl(self):
if self.type == "hist":
return "BPF_HISTOGRAM(%s, %s);" % \
(self.probe_hash_name, self.expr_types[0])
else:
text = "struct %s_key_t {\n" % self.probe_hash_name
for i in range(0, len(self.expr_types)):
text += self._generate_hash_field(i)
text += "};\n"
text += "BPF_HASH(%s, struct %s_key_t, u64);\n" % \
(self.probe_hash_name, self.probe_hash_name)
return text
def _generate_key_assignment(self):
if self.type == "hist":
return self._generate_usdt_arg_assignment(0) + \
("%s __key = %s;\n" %
(self.expr_types[0], self.exprs[0]))
else:
text = "struct %s_key_t __key = {};\n" % \
self.probe_hash_name
for i in range(0, len(self.exprs)):
text += self._generate_field_assignment(i)
return text
def _generate_hash_update(self):
if self.type == "hist":
return "%s.atomic_increment(bpf_log2l(__key));" % \
self.probe_hash_name
else:
return "%s.atomic_increment(__key);" % \
self.probe_hash_name
def _generate_pid_filter(self):
# Kernel probes need to explicitly filter pid, because the
# attach interface doesn't support pid filtering
if self.pid is not None and not self.is_user:
return "if (__tgid != %d) { return 0; }" % self.pid
else:
return ""
def _generate_tid_filter(self):
if self.tid is not None and not self.is_user:
return "if (__pid != %d) { return 0; }" % self.tid
else:
return ""
def generate_text(self):
program = ""
probe_text = """
DATA_DECL
""" + (
"TRACEPOINT_PROBE(%s, %s)" %
(self.tp_category, self.tp_event)
if self.probe_type == "t"
else "int PROBENAME(struct pt_regs *ctx SIGNATURE)") + """
{
u64 __pid_tgid = bpf_get_current_pid_tgid();
u32 __pid = __pid_tgid; // lower 32 bits
u32 __tgid = __pid_tgid >> 32; // upper 32 bits
PID_FILTER
TID_FILTER
PREFIX
KEY_EXPR
if (!(FILTER)) return 0;
COLLECT
return 0;
}
"""
prefix = ""
signature = ""
# If any entry arguments are probed in a ret probe, we need
# to generate an entry probe to collect them
if self.entry_probe_required:
program += self._generate_entry_probe()
prefix += self._generate_retprobe_prefix()
# Replace $entry(paramname) with a reference to the
# value we collected when entering the function:
self._replace_entry_exprs()
if self.probe_type == "p" and len(self.signature) > 0:
# Only entry uprobes/kprobes can have user-specified
# signatures. Other probes force it to ().
signature = ", " + self.signature
# If COMM is specified prefix with code to get process name
if self.exprs.count(self.aliases['$COMM']):
prefix += self._generate_comm_prefix()
program += probe_text.replace("PROBENAME",
self.probe_func_name)
program = program.replace("SIGNATURE", signature)
program = program.replace("PID_FILTER",
self._generate_pid_filter())
program = program.replace("TID_FILTER",
self._generate_tid_filter())
decl = self._generate_hash_decl()
key_expr = self._generate_key_assignment()
collect = self._generate_hash_update()
program = program.replace("DATA_DECL", decl)
program = program.replace("KEY_EXPR", key_expr)
program = program.replace("FILTER",
"1" if len(self.filter) == 0 else self.filter)
program = program.replace("COLLECT", collect)
program = program.replace("PREFIX", prefix)
return self.streq_functions + program
def _attach_u(self):
libpath = BPF.find_library(self.library)
if libpath is None:
libpath = BPF.find_exe(self.library)
if libpath is None or len(libpath) == 0:
self._bail("unable to find library %s" % self.library)
if self.probe_type == "r":
self.bpf.attach_uretprobe(name=libpath,
sym=self.function,
fn_name=self.probe_func_name,
pid=self.pid or -1)
else:
self.bpf.attach_uprobe(name=libpath,
sym=self.function,
fn_name=self.probe_func_name,
pid=self.pid or -1)
def _attach_k(self):
if self.probe_type == "t":
pass # Nothing to do for tracepoints
elif self.probe_type == "r":
self.bpf.attach_kretprobe(event=self.function,
fn_name=self.probe_func_name)
else:
self.bpf.attach_kprobe(event=self.function,
fn_name=self.probe_func_name)
def attach(self, bpf):
self.bpf = bpf
if self.probe_type == "u":
return
if self.is_user:
self._attach_u()
else:
self._attach_k()
if self.entry_probe_required:
self._attach_entry_probe()
# Check whether hash table batch ops is supported
if self.type == "freq" and self.bpf.kernel_struct_has_field(
b'bpf_map_ops', b'map_lookup_and_delete_batch') == 1:
self.htab_batch_ops = True
else:
self.htab_batch_ops = False
def _v2s(self, v):
# Most fields can be converted with plain str(), but strings
# are wrapped in a __string_t which has an .s field
if "__string_t" in type(v).__name__:
return str(v.s)
return str(v)
def _display_expr(self, i):
# Replace ugly latency calculation with $latency
expr = self.exprs[i].replace(
"(bpf_ktime_get_ns() - *____latency_val)", "$latency")
# Replace alias values back with the alias name
for alias, subst in Probe.aliases.items():
expr = expr.replace(subst, alias)
# Replace retval expression with $retval
expr = expr.replace("PT_REGS_RC(ctx)", "$retval")
# Replace ugly (*__param_val) expressions with param name
return re.sub(r"\(\*__(\w+)_val\)", r"\1", expr)
def _display_key(self, key):
if self.is_default_expr:
if not self.probe_type == "r":
return "total calls"
else:
return "retval = %s" % str(key.v0)
else:
# The key object has v0, ..., vk fields containing
# the values of the expressions from self.exprs
def str_i(i):
key_i = self._v2s(getattr(key, "v%d" % i))
return "%s = %s" % \
(self._display_expr(i), key_i)
return ", ".join(map(str_i, range(0, len(self.exprs))))
def display(self, top):
data = self.bpf.get_table(self.probe_hash_name)
if self.type == "freq":
print(self.label or self.raw_spec)
print("\t%-10s %s" % ("COUNT", "EVENT"))
sdata = sorted(data.items_lookup_batch()
if self.htab_batch_ops else data.items(),
key=lambda p: p[1].value)
if top is not None:
sdata = sdata[-top:]
for key, value in sdata:
# Print some nice values if the user didn't
# specify an expression to probe
if self.is_default_expr:
if not self.probe_type == "r":
key_str = "total calls"
else:
key_str = "retval = %s" % \
self._v2s(key.v0)
else:
key_str = self._display_key(key)
print("\t%-10s %s" %
(str(value.value), key_str))
elif self.type == "hist":
label = self.label or (self._display_expr(0)
if not self.is_default_expr else "retval")
data.print_log2_hist(val_type=label)
if not self.cumulative:
if self.htab_batch_ops:
data.items_delete_batch()
else:
data.clear()
def __str__(self):
return self.label or self.raw_spec
class Tool(object):
examples = """
Probe specifier syntax:
{p,r,t,u}:{[library],category}:function(signature):type[,type...]:expr[,expr...][:filter]][#label]
Where:
p,r,t,u -- probe at function entry, function exit, kernel
tracepoint, or USDT probe
in exit probes: can use $retval, $entry(param), $latency
library -- the library that contains the function
(leave empty for kernel functions)
category -- the category of the kernel tracepoint (e.g. net, sched)
function -- the function name to trace (or tracepoint name)
signature -- the function's parameters, as in the C header
type -- the type of the expression to collect (supports multiple)
expr -- the expression to collect (supports multiple)
filter -- the filter that is applied to collected values
label -- the label for this probe in the resulting output
EXAMPLES:
argdist -H 'p::__kmalloc(u64 size):u64:size'
Print a histogram of allocation sizes passed to kmalloc
argdist -p 1005 -C 'p:c:malloc(size_t size):size_t:size:size==16'
Print a frequency count of how many times process 1005 called malloc
with an allocation size of 16 bytes
argdist -C 'r:c:gets():char*:(char*)$retval#snooped strings'
Snoop on all strings returned by gets()
argdist -H 'r::__kmalloc(size_t size):u64:$latency/$entry(size)#ns per byte'
Print a histogram of nanoseconds per byte from kmalloc allocations
argdist -C 'p::__kmalloc(size_t sz, gfp_t flags):size_t:sz:flags&GFP_ATOMIC'
Print frequency count of kmalloc allocation sizes that have GFP_ATOMIC
argdist -p 1005 -C 'p:c:write(int fd):int:fd' -T 5
Print frequency counts of how many times writes were issued to a
particular file descriptor number, in process 1005, but only show
the top 5 busiest fds
argdist -p 1005 -H 'r:c:read()'
Print a histogram of results (sizes) returned by read() in process 1005
argdist -C 'r::__vfs_read():u32:$PID:$latency > 100000'
Print frequency of reads by process where the latency was >0.1ms
argdist -C 'r::__vfs_read():u32:$COMM:$latency > 100000'
Print frequency of reads by process name where the latency was >0.1ms
argdist -H 'r::__vfs_read(void *file, void *buf, size_t count):size_t:
$entry(count):$latency > 1000000'
Print a histogram of read sizes that were longer than 1ms
argdist -H \\
'p:c:write(int fd, const void *buf, size_t count):size_t:count:fd==1'
Print a histogram of buffer sizes passed to write() across all
processes, where the file descriptor was 1 (STDOUT)
argdist -C 'p:c:fork()#fork calls'
Count fork() calls in libc across all processes
Can also use funccount.py, which is easier and more flexible
argdist -H 't:block:block_rq_complete():u32:args->nr_sector'
Print histogram of number of sectors in completing block I/O requests
argdist -C 't:irq:irq_handler_entry():int:args->irq'
Aggregate interrupts by interrupt request (IRQ)
argdist -C 'u:pthread:pthread_start():u64:arg2' -p 1337
Print frequency of function addresses used as a pthread start function,
relying on the USDT pthread_start probe in process 1337
argdist -H 'p:c:sleep(u32 seconds):u32:seconds' \\
-H 'p:c:nanosleep(struct timespec *req):long:req->tv_nsec'
Print histograms of sleep() and nanosleep() parameter values
argdist -p 2780 -z 120 \\
-C 'p:c:write(int fd, char* buf, size_t len):char*:buf:fd==1'
Spy on writes to STDOUT performed by process 2780, up to a string size
of 120 characters
argdist -I 'kernel/sched/sched.h' \\
-C 'p::__account_cfs_rq_runtime(struct cfs_rq *cfs_rq):s64:cfs_rq->runtime_remaining'
Trace on the cfs scheduling runqueue remaining runtime. The struct cfs_rq is defined
in kernel/sched/sched.h which is in kernel source tree and not in kernel-devel
package. So this command needs to run at the kernel source tree root directory
so that the added header file can be found by the compiler.
"""
def __init__(self):
parser = argparse.ArgumentParser(description="Trace a " +
"function and display a summary of its parameter values.",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog=Tool.examples)
parser.add_argument("-p", "--pid", type=int,
help="id of the process to trace (optional)")
parser.add_argument("-t", "--tid", type=int,
help="id of the thread to trace (optional)")
parser.add_argument("-z", "--string-size", default=80,
type=int,
help="maximum string size to read from char* arguments")
parser.add_argument("-i", "--interval", default=1, type=int,
help="output interval, in seconds (default 1 second)")
parser.add_argument("-d", "--duration", type=int,
help="total duration of trace, in seconds")
parser.add_argument("-n", "--number", type=int, dest="count",
help="number of outputs")
parser.add_argument("-v", "--verbose", action="store_true",
help="print resulting BPF program code before executing")
parser.add_argument("-c", "--cumulative", action="store_true",
help="do not clear histograms and freq counts at " +
"each interval")
parser.add_argument("-T", "--top", type=int,
help="number of top results to show (not applicable to " +
"histograms)")
parser.add_argument("-H", "--histogram", action="append",
dest="histspecifier", metavar="specifier",
help="probe specifier to capture histogram of " +
"(see examples below)")
parser.add_argument("-C", "--count", action="append",
dest="countspecifier", metavar="specifier",
help="probe specifier to capture count of " +
"(see examples below)")
parser.add_argument("-I", "--include", action="append",
metavar="header",
help="additional header files to include in the BPF program "
"as either full path, "
"or relative to relative to current working directory, "
"or relative to default kernel header search path")
parser.add_argument("--ebpf", action="store_true",
help=argparse.SUPPRESS)
self.args = parser.parse_args()
self.usdt_ctx = None
def _create_probes(self):
self.probes = []
for specifier in (self.args.countspecifier or []):
self.probes.append(Probe(self, "freq", specifier))
for histspecifier in (self.args.histspecifier or []):
self.probes.append(Probe(self, "hist", histspecifier))
if len(self.probes) == 0:
print("at least one specifier is required")
exit(1)
def _generate_program(self):
bpf_source = """
struct __string_t { char s[%d]; };
#include <uapi/linux/ptrace.h>
""" % self.args.string_size
for include in (self.args.include or []):
if include.startswith((".", "/")):
include = os.path.abspath(include)
bpf_source += "#include \"%s\"\n" % include
else:
bpf_source += "#include <%s>\n" % include
bpf_source += BPF.generate_auto_includes(
map(lambda p: p.raw_spec, self.probes))
for probe in self.probes:
bpf_source += probe.generate_text()
if self.args.verbose:
for text in [probe.usdt_ctx.get_text()
for probe in self.probes
if probe.usdt_ctx]:
print(text)
if self.args.verbose or self.args.ebpf:
print(bpf_source)
if self.args.ebpf:
exit()
usdt_contexts = [probe.usdt_ctx
for probe in self.probes if probe.usdt_ctx]
self.bpf = BPF(text=bpf_source, usdt_contexts=usdt_contexts)
def _attach(self):
for probe in self.probes:
probe.attach(self.bpf)
if self.args.verbose:
print("open uprobes: %s" % list(self.bpf.uprobe_fds.keys()))
print("open kprobes: %s" % list(self.bpf.kprobe_fds.keys()))
def _main_loop(self):
count_so_far = 0
seconds = 0
while True:
try:
sleep(self.args.interval)
seconds += self.args.interval
except KeyboardInterrupt:
exit()
print("[%s]" % strftime("%H:%M:%S"))
for probe in self.probes:
probe.display(self.args.top)
count_so_far += 1
if self.args.count is not None and \
count_so_far >= self.args.count:
exit()
if self.args.duration and \
seconds >= self.args.duration:
exit()
def run(self):
try:
self._create_probes()
self._generate_program()
self._attach()
self._main_loop()
except:
exc_info = sys.exc_info()
sys_exit = exc_info[0] is SystemExit
if self.args.verbose:
traceback.print_exc()
elif not sys_exit:
print(exc_info[1])
exit(0 if sys_exit else 1)
if __name__ == "__main__":
Tool().run()
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| ModemManager | File | 2.07 MB | 0755 |
|
| a2disconf | File | 15.75 KB | 0755 |
|
| a2dismod | File | 15.75 KB | 0755 |
|
| a2dissite | File | 15.75 KB | 0755 |
|
| a2enconf | File | 15.75 KB | 0755 |
|
| a2enmod | File | 15.75 KB | 0755 |
|
| a2ensite | File | 15.75 KB | 0755 |
|
| a2query | File | 9.6 KB | 0755 |
|
| aa-load | File | 38.75 KB | 0755 |
|
| aa-remove-unknown | File | 3.15 KB | 0755 |
|
| aa-status | File | 39.06 KB | 0755 |
|
| aa-teardown | File | 137 B | 0755 |
|
| accessdb | File | 14.55 KB | 0755 |
|
| add-shell | File | 1.03 KB | 0755 |
|
| addgnupghome | File | 3 KB | 0755 |
|
| addgroup | File | 53.9 KB | 0755 |
|
| adduser | File | 53.9 KB | 0755 |
|
| agetty | File | 59.56 KB | 0755 |
|
| apache2 | File | 736.55 KB | 0755 |
|
| apache2ctl | File | 7.26 KB | 0755 |
|
| apachectl | File | 7.26 KB | 0755 |
|
| apparmor_parser | File | 1.55 MB | 0755 |
|
| apparmor_status | File | 39.06 KB | 0755 |
|
| applygnupgdefaults | File | 2.17 KB | 0755 |
|
| argdist-bpfcc | File | 36 KB | 0755 |
|
| arpd | File | 26.33 KB | 0755 |
|
| arptables | File | 219.16 KB | 0755 |
|
| arptables-nft | File | 219.16 KB | 0755 |
|
| arptables-nft-restore | File | 219.16 KB | 0755 |
|
| arptables-nft-save | File | 219.16 KB | 0755 |
|
| arptables-restore | File | 219.16 KB | 0755 |
|
| arptables-save | File | 219.16 KB | 0755 |
|
| badblocks | File | 34.32 KB | 0755 |
|
| bashreadline-bpfcc | File | 2.32 KB | 0755 |
|
| bashreadline.bt | File | 698 B | 0755 |
|
| bcache-super-show | File | 14.3 KB | 0755 |
|
| bindsnoop-bpfcc | File | 15.96 KB | 0755 |
|
| biolatency-bpfcc | File | 11.1 KB | 0755 |
|
| biolatency-kp.bt | File | 664 B | 0755 |
|
| biolatency.bt | File | 681 B | 0755 |
|
| biolatpcts-bpfcc | File | 10.01 KB | 0755 |
|
| biopattern-bpfcc | File | 3.86 KB | 0755 |
|
| biosdecode | File | 27.2 KB | 0755 |
|
| biosnoop-bpfcc | File | 10.58 KB | 0755 |
|
| biosnoop.bt | File | 1.12 KB | 0755 |
|
| biostacks.bt | File | 915 B | 0755 |
|
| biotop-bpfcc | File | 9.34 KB | 0755 |
|
| bitesize-bpfcc | File | 1.14 KB | 0755 |
|
| bitesize.bt | File | 567 B | 0755 |
|
| blkdeactivate | File | 15.97 KB | 0755 |
|
| blkdiscard | File | 22.38 KB | 0755 |
|
| blkid | File | 54.41 KB | 0755 |
|
| blkzone | File | 34.38 KB | 0755 |
|
| blockdev | File | 34.38 KB | 0755 |
|
| bpflist-bpfcc | File | 2.54 KB | 0755 |
|
| bpftool | File | 1.58 KB | 0755 |
|
| bridge | File | 108.49 KB | 0755 |
|
| btrfsdist-bpfcc | File | 6.47 KB | 0755 |
|
| btrfsslower-bpfcc | File | 9.75 KB | 0755 |
|
| cache_check | File | 1.36 MB | 0755 |
|
| cache_dump | File | 1.36 MB | 0755 |
|
| cache_metadata_size | File | 1.36 MB | 0755 |
|
| cache_repair | File | 1.36 MB | 0755 |
|
| cache_restore | File | 1.36 MB | 0755 |
|
| cache_writeback | File | 1.36 MB | 0755 |
|
| cachestat-bpfcc | File | 6.38 KB | 0755 |
|
| cachetop-bpfcc | File | 9.15 KB | 0755 |
|
| capable-bpfcc | File | 8.28 KB | 0755 |
|
| capable.bt | File | 1.88 KB | 0755 |
|
| capsh | File | 57.09 KB | 0755 |
|
| cfdisk | File | 94.73 KB | 0755 |
|
| cgdisk | File | 166.48 KB | 0755 |
|
| chcpu | File | 30.38 KB | 0755 |
|
| check_forensic | File | 952 B | 0755 |
|
| chgpasswd | File | 58.32 KB | 0755 |
|
| chmem | File | 34.38 KB | 0755 |
|
| chpasswd | File | 54.43 KB | 0755 |
|
| chroot | File | 38.51 KB | 0755 |
|
| cobjnew-bpfcc | File | 53 B | 0755 |
|
| compactsnoop-bpfcc | File | 11.1 KB | 0755 |
|
| cpgr | File | 48.45 KB | 0755 |
|
| cppw | File | 48.45 KB | 0755 |
|
| cpudist-bpfcc | File | 6.85 KB | 0755 |
|
| cpuunclaimed-bpfcc | File | 14.59 KB | 0755 |
|
| cpuwalk.bt | File | 497 B | 0755 |
|
| criticalstat-bpfcc | File | 8.41 KB | 0755 |
|
| cron | File | 58.67 KB | 0755 |
|
| cryptdisks_start | File | 1.51 KB | 0755 |
|
| cryptdisks_stop | File | 844 B | 0755 |
|
| cryptsetup | File | 225.9 KB | 0755 |
|
| ctrlaltdel | File | 14.38 KB | 0755 |
|
| dbconfig-generate-include | File | 12.36 KB | 0755 |
|
| dbconfig-load-include | File | 5.57 KB | 0755 |
|
| dbslower-bpfcc | File | 7.22 KB | 0755 |
|
| dbstat-bpfcc | File | 3.7 KB | 0755 |
|
| dcb | File | 80.52 KB | 0755 |
|
| dcsnoop-bpfcc | File | 4.03 KB | 0755 |
|
| dcsnoop.bt | File | 1.23 KB | 0755 |
|
| dcstat-bpfcc | File | 3.77 KB | 0755 |
|
| ddns-confgen | File | 22.3 KB | 0755 |
|
| deadlock-bpfcc | File | 20.45 KB | 0755 |
|
| debugfs | File | 225.87 KB | 0755 |
|
| delgroup | File | 18.53 KB | 0755 |
|
| deluser | File | 18.53 KB | 0755 |
|
| depmod | File | 170.24 KB | 0755 |
|
| devlink | File | 150.86 KB | 0755 |
|
| dhcpcd | File | 395.4 KB | 0755 |
|
| dirtop-bpfcc | File | 8.37 KB | 0755 |
|
| dmeventd | File | 50.38 KB | 0755 |
|
| dmidecode | File | 135.25 KB | 0755 |
|
| dmsetup | File | 171.05 KB | 0755 |
|
| dmstats | File | 171.05 KB | 0755 |
|
| dosfsck | File | 78.38 KB | 0755 |
|
| dosfslabel | File | 38.38 KB | 0755 |
|
| dpkg-preconfigure | File | 4.25 KB | 0755 |
|
| dpkg-reconfigure | File | 4.43 KB | 0755 |
|
| drsnoop-bpfcc | File | 6.73 KB | 0755 |
|
| dumpe2fs | File | 34.31 KB | 0755 |
|
| e2freefrag | File | 18.3 KB | 0755 |
|
| e2fsck | File | 364.34 KB | 0755 |
|
| e2image | File | 42.31 KB | 0755 |
|
| e2label | File | 110.56 KB | 0755 |
|
| e2mmpstatus | File | 34.31 KB | 0755 |
|
| e2scrub | File | 7.12 KB | 0755 |
|
| e2scrub_all | File | 5.27 KB | 0755 |
|
| e2undo | File | 22.3 KB | 0755 |
|
| e4crypt | File | 30.38 KB | 0755 |
|
| e4defrag | File | 34.3 KB | 0755 |
|
| ebtables | File | 219.16 KB | 0755 |
|
| ebtables-nft | File | 219.16 KB | 0755 |
|
| ebtables-nft-restore | File | 219.16 KB | 0755 |
|
| ebtables-nft-save | File | 219.16 KB | 0755 |
|
| ebtables-restore | File | 219.16 KB | 0755 |
|
| ebtables-save | File | 219.16 KB | 0755 |
|
| ebtables-translate | File | 219.16 KB | 0755 |
|
| era_check | File | 1.36 MB | 0755 |
|
| era_dump | File | 1.36 MB | 0755 |
|
| era_invalidate | File | 1.36 MB | 0755 |
|
| era_restore | File | 1.36 MB | 0755 |
|
| ethtool | File | 651.68 KB | 0755 |
|
| execsnoop-bpfcc | File | 9.82 KB | 0755 |
|
| execsnoop.bt | File | 928 B | 0755 |
|
| exitsnoop-bpfcc | File | 9.42 KB | 0755 |
|
| ext4dist-bpfcc | File | 6.53 KB | 0755 |
|
| ext4slower-bpfcc | File | 9.71 KB | 0755 |
|
| faillock | File | 22.31 KB | 0755 |
|
| fatlabel | File | 38.38 KB | 0755 |
|
| fdisk | File | 114.42 KB | 0755 |
|
| filefrag | File | 18.32 KB | 0755 |
|
| filegone-bpfcc | File | 5.64 KB | 0755 |
|
| filelife-bpfcc | File | 6.38 KB | 0755 |
|
| fileslower-bpfcc | File | 7.2 KB | 0755 |
|
| filetop-bpfcc | File | 6.35 KB | 0755 |
|
| findfs | File | 14.38 KB | 0755 |
|
| fixparts | File | 58.48 KB | 0755 |
|
| fsadm | File | 24 KB | 0755 |
|
| fsck | File | 42.42 KB | 0755 |
|
| fsck.btrfs | File | 1.16 KB | 0755 |
|
| fsck.cramfs | File | 30.44 KB | 0755 |
|
| fsck.ext2 | File | 364.34 KB | 0755 |
|
| fsck.ext3 | File | 364.34 KB | 0755 |
|
| fsck.ext4 | File | 364.34 KB | 0755 |
|
| fsck.fat | File | 78.38 KB | 0755 |
|
| fsck.minix | File | 54.41 KB | 0755 |
|
| fsck.msdos | File | 78.38 KB | 0755 |
|
| fsck.vfat | File | 78.38 KB | 0755 |
|
| fsck.xfs | File | 2.51 KB | 0755 |
|
| fsfreeze | File | 14.38 KB | 0755 |
|
| fstab-decode | File | 14.3 KB | 0755 |
|
| fstrim | File | 42.38 KB | 0755 |
|
| funccount-bpfcc | File | 12.68 KB | 0755 |
|
| funcinterval-bpfcc | File | 5.46 KB | 0755 |
|
| funclatency-bpfcc | File | 11.28 KB | 0755 |
|
| funcslower-bpfcc | File | 10.38 KB | 0755 |
|
| gdisk | File | 198.48 KB | 0755 |
|
| genl | File | 120.58 KB | 0755 |
|
| getcap | File | 14.3 KB | 0755 |
|
| gethostlatency-bpfcc | File | 3.82 KB | 0755 |
|
| gethostlatency.bt | File | 1.19 KB | 0755 |
|
| getpcaps | File | 14.3 KB | 0755 |
|
| getty | File | 59.56 KB | 0755 |
|
| groupadd | File | 71.13 KB | 0755 |
|
| groupdel | File | 62.91 KB | 0755 |
|
| groupmems | File | 58.34 KB | 0755 |
|
| groupmod | File | 71.04 KB | 0755 |
|
| grpck | File | 58.32 KB | 0755 |
|
| grpconv | File | 50.16 KB | 0755 |
|
| grpunconv | File | 50.16 KB | 0755 |
|
| grub-bios-setup | File | 958.55 KB | 0755 |
|
| grub-install | File | 1.17 MB | 0755 |
|
| grub-macbless | File | 946.41 KB | 0755 |
|
| grub-mkconfig | File | 8.63 KB | 0755 |
|
| grub-mkdevicemap | File | 70.69 KB | 0755 |
|
| grub-probe | File | 954.66 KB | 0755 |
|
| grub-reboot | File | 4.73 KB | 0755 |
|
| grub-set-default | File | 3.47 KB | 0755 |
|
| halt | File | 1.43 MB | 0755 |
|
| hardirqs-bpfcc | File | 6.85 KB | 0755 |
|
| hdparm | File | 139.43 KB | 0755 |
|
| httxt2dbm | File | 14.3 KB | 0755 |
|
| iconvconfig | File | 34.47 KB | 0755 |
|
| init | File | 98.45 KB | 0755 |
|
| inject-bpfcc | File | 16.06 KB | 0755 |
|
| insmod | File | 170.24 KB | 0755 |
|
| install-sgmlcatalog | File | 4.44 KB | 0755 |
|
| installkernel | File | 2.6 KB | 0755 |
|
| integritysetup | File | 67.06 KB | 0755 |
|
| invoke-rc.d | File | 16.13 KB | 0755 |
|
| ip | File | 754.8 KB | 0755 |
|
| ip6tables | File | 219.16 KB | 0755 |
|
| ip6tables-apply | File | 6.89 KB | 0755 |
|
| ip6tables-legacy | File | 92.95 KB | 0755 |
|
| ip6tables-legacy-restore | File | 92.95 KB | 0755 |
|
| ip6tables-legacy-save | File | 92.95 KB | 0755 |
|
| ip6tables-nft | File | 219.16 KB | 0755 |
|
| ip6tables-nft-restore | File | 219.16 KB | 0755 |
|
| ip6tables-nft-save | File | 219.16 KB | 0755 |
|
| ip6tables-restore | File | 219.16 KB | 0755 |
|
| ip6tables-restore-translate | File | 219.16 KB | 0755 |
|
| ip6tables-save | File | 219.16 KB | 0755 |
|
| ip6tables-translate | File | 219.16 KB | 0755 |
|
| iptables | File | 219.16 KB | 0755 |
|
| iptables-apply | File | 6.89 KB | 0755 |
|
| iptables-legacy | File | 92.95 KB | 0755 |
|
| iptables-legacy-restore | File | 92.95 KB | 0755 |
|
| iptables-legacy-save | File | 92.95 KB | 0755 |
|
| iptables-nft | File | 219.16 KB | 0755 |
|
| iptables-nft-restore | File | 219.16 KB | 0755 |
|
| iptables-nft-save | File | 219.16 KB | 0755 |
|
| iptables-restore | File | 219.16 KB | 0755 |
|
| iptables-restore-translate | File | 219.16 KB | 0755 |
|
| iptables-save | File | 219.16 KB | 0755 |
|
| iptables-translate | File | 219.16 KB | 0755 |
|
| iscsi-iname | File | 18.3 KB | 0755 |
|
| iscsi_discovery | File | 5.17 KB | 0755 |
|
| iscsiadm | File | 370.43 KB | 0755 |
|
| iscsid | File | 286.55 KB | 0755 |
|
| iscsistart | File | 274.49 KB | 0755 |
|
| isosize | File | 14.38 KB | 0755 |
|
| iucode-tool | File | 54.34 KB | 0755 |
|
| iucode_tool | File | 54.34 KB | 0755 |
|
| javacalls-bpfcc | File | 55 B | 0755 |
|
| javaflow-bpfcc | File | 54 B | 0755 |
|
| javagc-bpfcc | File | 52 B | 0755 |
|
| javaobjnew-bpfcc | File | 56 B | 0755 |
|
| javastat-bpfcc | File | 54 B | 0755 |
|
| javathreads-bpfcc | File | 57 B | 0755 |
|
| kbdrate | File | 18.31 KB | 0755 |
|
| killall5 | File | 26.23 KB | 0755 |
|
| killsnoop-bpfcc | File | 4.45 KB | 0755 |
|
| killsnoop.bt | File | 873 B | 0755 |
|
| klockstat-bpfcc | File | 13.04 KB | 0755 |
|
| kpartx | File | 42.16 KB | 0755 |
|
| kvmexit-bpfcc | File | 11.19 KB | 0755 |
|
| ldattach | File | 26.38 KB | 0755 |
|
| ldconfig | File | 387 B | 0755 |
|
| ldconfig.real | File | 1 MB | 0755 |
|
| llcstat-bpfcc | File | 4.48 KB | 0755 |
|
| loads.bt | File | 1.1 KB | 0755 |
|
| locale-gen | File | 4.21 KB | 0755 |
|
| logrotate | File | 94.24 KB | 0755 |
|
| logsave | File | 14.16 KB | 0755 |
|
| losetup | File | 74.52 KB | 0755 |
|
| lsmod | File | 170.24 KB | 0755 |
|
| luksformat | File | 3.32 KB | 0755 |
|
| lvchange | File | 3.01 MB | 0755 |
|
| lvconvert | File | 3.01 MB | 0755 |
|
| lvcreate | File | 3.01 MB | 0755 |
|
| lvdisplay | File | 3.01 MB | 0755 |
|
| lvextend | File | 3.01 MB | 0755 |
|
| lvm | File | 3.01 MB | 0755 |
|
| lvmconfig | File | 3.01 MB | 0755 |
|
| lvmdiskscan | File | 3.01 MB | 0755 |
|
| lvmdump | File | 10.12 KB | 0755 |
|
| lvmpolld | File | 235.97 KB | 0755 |
|
| lvmsadc | File | 3.01 MB | 0755 |
|
| lvmsar | File | 3.01 MB | 0755 |
|
| lvreduce | File | 3.01 MB | 0755 |
|
| lvremove | File | 3.01 MB | 0755 |
|
| lvrename | File | 3.01 MB | 0755 |
|
| lvresize | File | 3.01 MB | 0755 |
|
| lvs | File | 3.01 MB | 0755 |
|
| lvscan | File | 3.01 MB | 0755 |
|
| lxc | File | 589 B | 0755 |
|
| lxd | File | 589 B | 0755 |
|
| make-bcache | File | 22.38 KB | 0755 |
|
| make-ssl-cert | File | 6.65 KB | 0755 |
|
| mariadbd | File | 26.09 MB | 0755 |
|
| mdadm | File | 622.21 KB | 0755 |
|
| mdflush-bpfcc | File | 2.24 KB | 0755 |
|
| mdflush.bt | File | 775 B | 0755 |
|
| mdmon | File | 258.8 KB | 0755 |
|
| memleak-bpfcc | File | 20.8 KB | 0755 |
|
| mkdosfs | File | 50.83 KB | 0755 |
|
| mke2fs | File | 130.62 KB | 0755 |
|
| mkfs | File | 14.38 KB | 0755 |
|
| mkfs.bfs | File | 22.38 KB | 0755 |
|
| mkfs.btrfs | File | 560.3 KB | 0755 |
|
| mkfs.cramfs | File | 34.32 KB | 0755 |
|
| mkfs.ext2 | File | 130.62 KB | 0755 |
|
| mkfs.ext3 | File | 130.62 KB | 0755 |
|
| mkfs.ext4 | File | 130.62 KB | 0755 |
|
| mkfs.fat | File | 50.83 KB | 0755 |
|
| mkfs.minix | File | 42.39 KB | 0755 |
|
| mkfs.msdos | File | 50.83 KB | 0755 |
|
| mkfs.ntfs | File | 66.38 KB | 0755 |
|
| mkfs.vfat | File | 50.83 KB | 0755 |
|
| mkfs.xfs | File | 438.99 KB | 0755 |
|
| mkhomedir_helper | File | 22.34 KB | 0755 |
|
| mkinitramfs | File | 15.39 KB | 0755 |
|
| mklost+found | File | 14.3 KB | 0755 |
|
| mkntfs | File | 66.38 KB | 0755 |
|
| mkswap | File | 50.38 KB | 0755 |
|
| modinfo | File | 170.24 KB | 0755 |
|
| modprobe | File | 170.24 KB | 0755 |
|
| mount.fuse | File | 18.3 KB | 0755 |
|
| mount.fuse3 | File | 18.3 KB | 0755 |
|
| mount.lowntfs-3g | File | 118.98 KB | 0755 |
|
| mount.ntfs | File | 159.01 KB | 0755 |
|
| mount.ntfs-3g | File | 159.01 KB | 0755 |
|
| mountsnoop-bpfcc | File | 14.62 KB | 0755 |
|
| mpathpersist | File | 31.21 KB | 0755 |
|
| multipath | File | 34.3 KB | 0755 |
|
| multipathc | File | 18.3 KB | 0755 |
|
| multipathd | File | 142.46 KB | 0755 |
|
| mysqld | File | 26.09 MB | 0755 |
|
| mysqld_qslower-bpfcc | File | 3.05 KB | 0755 |
|
| named | File | 574.16 KB | 0755 |
|
| naptime.bt | File | 1.01 KB | 0755 |
|
| needrestart | File | 40.13 KB | 0755 |
|
| netfilter-persistent | File | 1.04 KB | 0755 |
|
| netplan | File | 802 B | 0755 |
|
| netqtop-bpfcc | File | 5.59 KB | 0755 |
|
| newusers | File | 86.96 KB | 0755 |
|
| nfnl_osf | File | 18.3 KB | 0755 |
|
| nfsdist-bpfcc | File | 4.95 KB | 0755 |
|
| nfsslower-bpfcc | File | 13.61 KB | 0755 |
|
| nft | File | 26.23 KB | 0755 |
|
| nodegc-bpfcc | File | 52 B | 0755 |
|
| nodestat-bpfcc | File | 54 B | 0755 |
|
| nologin | File | 14.3 KB | 0755 |
|
| ntfsclone | File | 50.38 KB | 0755 |
|
| ntfscp | File | 30.38 KB | 0755 |
|
| ntfslabel | File | 22.38 KB | 0755 |
|
| ntfsresize | File | 62.39 KB | 0755 |
|
| ntfsundelete | File | 50.38 KB | 0755 |
|
| offcputime-bpfcc | File | 13.46 KB | 0755 |
|
| offwaketime-bpfcc | File | 15.31 KB | 0755 |
|
| on_ac_power | File | 3.7 KB | 0755 |
|
| oomkill-bpfcc | File | 2.04 KB | 0755 |
|
| oomkill.bt | File | 1.17 KB | 0755 |
|
| opensnoop-bpfcc | File | 14.24 KB | 0755 |
|
| opensnoop.bt | File | 953 B | 0755 |
|
| overlayroot-chroot | File | 2.45 KB | 0755 |
|
| ownership | File | 14.45 KB | 0755 |
|
| pam-auth-update | File | 20.96 KB | 0755 |
|
| pam_extrausers_chkpwd | File | 26.31 KB | 2755 |
|
| pam_extrausers_update | File | 34.31 KB | 0755 |
|
| pam_getenv | File | 2.82 KB | 0755 |
|
| pam_namespace_helper | File | 467 B | 0755 |
|
| pam_timestamp_check | File | 14.31 KB | 0755 |
|
| paperconfig | File | 4.07 KB | 0755 |
|
| parted | File | 94.4 KB | 0755 |
|
| partprobe | File | 14.38 KB | 0755 |
|
| pdata_tools | File | 1.36 MB | 0755 |
|
| perlcalls-bpfcc | File | 55 B | 0755 |
|
| perlflow-bpfcc | File | 54 B | 0755 |
|
| perlstat-bpfcc | File | 54 B | 0755 |
|
| phpcalls-bpfcc | File | 54 B | 0755 |
|
| phpdismod | File | 7.11 KB | 0755 |
|
| phpenmod | File | 7.11 KB | 0755 |
|
| phpflow-bpfcc | File | 53 B | 0755 |
|
| phpquery | File | 6.24 KB | 0755 |
|
| phpstat-bpfcc | File | 53 B | 0755 |
|
| pidpersec-bpfcc | File | 1.08 KB | 0755 |
|
| pidpersec.bt | File | 628 B | 0755 |
|
| pivot_root | File | 14.38 KB | 0755 |
|
| plymouthd | File | 146.57 KB | 0755 |
|
| poweroff | File | 1.43 MB | 0755 |
|
| ppchcalls-bpfcc | File | 13.89 KB | 0755 |
|
| profile-bpfcc | File | 14.41 KB | 0755 |
|
| pvchange | File | 3.01 MB | 0755 |
|
| pvck | File | 3.01 MB | 0755 |
|
| pvcreate | File | 3.01 MB | 0755 |
|
| pvdisplay | File | 3.01 MB | 0755 |
|
| pvmove | File | 3.01 MB | 0755 |
|
| pvremove | File | 3.01 MB | 0755 |
|
| pvresize | File | 3.01 MB | 0755 |
|
| pvs | File | 3.01 MB | 0755 |
|
| pvscan | File | 3.01 MB | 0755 |
|
| pwck | File | 54.29 KB | 0755 |
|
| pwconv | File | 46.16 KB | 0755 |
|
| pwhistory_helper | File | 22.31 KB | 0755 |
|
| pwunconv | File | 46.16 KB | 0755 |
|
| pythoncalls-bpfcc | File | 57 B | 0755 |
|
| pythonflow-bpfcc | File | 56 B | 0755 |
|
| pythongc-bpfcc | File | 54 B | 0755 |
|
| pythonstat-bpfcc | File | 56 B | 0755 |
|
| rdmaucma-bpfcc | File | 4.95 KB | 0755 |
|
| readahead-bpfcc | File | 6.54 KB | 0755 |
|
| readprofile | File | 22.41 KB | 0755 |
|
| reboot | File | 1.43 MB | 0755 |
|
| remove-shell | File | 1.08 KB | 0755 |
|
| reset-trace-bpfcc | File | 3.42 KB | 0755 |
|
| resize2fs | File | 70.3 KB | 0755 |
|
| resolvconf | File | 158.67 KB | 0755 |
|
| rmmod | File | 170.24 KB | 0755 |
|
| rmt | File | 54.71 KB | 0755 |
|
| rmt-tar | File | 54.71 KB | 0755 |
|
| rndc | File | 42.3 KB | 0755 |
|
| rndc-confgen | File | 22.3 KB | 0755 |
|
| rsyslogd | File | 771.67 KB | 0755 |
|
| rtacct | File | 28.31 KB | 0755 |
|
| rtcwake | File | 34.38 KB | 0755 |
|
| rtmon | File | 116.52 KB | 0755 |
|
| rubycalls-bpfcc | File | 55 B | 0755 |
|
| rubyflow-bpfcc | File | 54 B | 0755 |
|
| rubygc-bpfcc | File | 52 B | 0755 |
|
| rubyobjnew-bpfcc | File | 56 B | 0755 |
|
| rubystat-bpfcc | File | 54 B | 0755 |
|
| runlevel | File | 1.43 MB | 0755 |
|
| runqlat-bpfcc | File | 9.3 KB | 0755 |
|
| runqlat.bt | File | 788 B | 0755 |
|
| runqlen-bpfcc | File | 8.05 KB | 0755 |
|
| runqlen.bt | File | 1.01 KB | 0755 |
|
| runqslower-bpfcc | File | 9.01 KB | 0755 |
|
| runuser | File | 54.38 KB | 0755 |
|
| service | File | 8.89 KB | 0755 |
|
| setcap | File | 14.3 KB | 0755 |
|
| setuids.bt | File | 1.76 KB | 0755 |
|
| setvesablank | File | 14.37 KB | 0755 |
|
| setvtrgb | File | 14.43 KB | 0755 |
|
| sfdisk | File | 106.38 KB | 0755 |
|
| sgdisk | File | 178.48 KB | 0755 |
|
| shadowconfig | File | 2.22 KB | 0755 |
|
| shmsnoop-bpfcc | File | 7.8 KB | 0755 |
|
| shutdown | File | 1.43 MB | 0755 |
|
| slabratetop-bpfcc | File | 6.38 KB | 0755 |
|
| sofdsnoop-bpfcc | File | 8.06 KB | 0755 |
|
| softirqs-bpfcc | File | 5.59 KB | 0755 |
|
| solisten-bpfcc | File | 5.96 KB | 0755 |
|
| split-logfile | File | 2.36 KB | 0755 |
|
| sshd | File | 899.82 KB | 0755 |
|
| ssllatency.bt | File | 2.08 KB | 0755 |
|
| sslsniff-bpfcc | File | 13.68 KB | 0755 |
|
| sslsnoop.bt | File | 1.99 KB | 0755 |
|
| stackcount-bpfcc | File | 16.26 KB | 0755 |
|
| start-stop-daemon | File | 47.49 KB | 0755 |
|
| statsnoop-bpfcc | File | 4.92 KB | 0755 |
|
| statsnoop.bt | File | 1.26 KB | 0755 |
|
| sudo_logsrvd | File | 248.5 KB | 0755 |
|
| sudo_sendlog | File | 131.67 KB | 0755 |
|
| sulogin | File | 42.38 KB | 0755 |
|
| swapin.bt | File | 600 B | 0755 |
|
| swaplabel | File | 18.38 KB | 0755 |
|
| swapoff | File | 22.38 KB | 0755 |
|
| swapon | File | 42.38 KB | 0755 |
|
| switch_root | File | 22.38 KB | 0755 |
|
| syncsnoop-bpfcc | File | 1.27 KB | 0755 |
|
| syncsnoop.bt | File | 839 B | 0755 |
|
| syscount-bpfcc | File | 8.57 KB | 0755 |
|
| syscount.bt | File | 872 B | 0755 |
|
| sysctl | File | 30.38 KB | 0755 |
|
| tarcat | File | 936 B | 0755 |
|
| tc | File | 630.08 KB | 0755 |
|
| tclcalls-bpfcc | File | 54 B | 0755 |
|
| tclflow-bpfcc | File | 53 B | 0755 |
|
| tclobjnew-bpfcc | File | 55 B | 0755 |
|
| tclstat-bpfcc | File | 53 B | 0755 |
|
| tcpaccept-bpfcc | File | 9 KB | 0755 |
|
| tcpaccept.bt | File | 1.71 KB | 0755 |
|
| tcpcong-bpfcc | File | 20.11 KB | 0755 |
|
| tcpconnect-bpfcc | File | 18.46 KB | 0755 |
|
| tcpconnect.bt | File | 1.58 KB | 0755 |
|
| tcpconnlat-bpfcc | File | 9.07 KB | 0755 |
|
| tcpdrop-bpfcc | File | 7.44 KB | 0755 |
|
| tcpdrop.bt | File | 2.41 KB | 0755 |
|
| tcplife-bpfcc | File | 16.55 KB | 0755 |
|
| tcplife.bt | File | 2.72 KB | 0755 |
|
| tcpretrans-bpfcc | File | 13.77 KB | 0755 |
|
| tcpretrans.bt | File | 2.07 KB | 0755 |
|
| tcprtt-bpfcc | File | 8.7 KB | 0755 |
|
| tcpstates-bpfcc | File | 13.73 KB | 0755 |
|
| tcpsubnet-bpfcc | File | 7.63 KB | 0755 |
|
| tcpsynbl-bpfcc | File | 2.12 KB | 0755 |
|
| tcpsynbl.bt | File | 962 B | 0755 |
|
| tcptop-bpfcc | File | 12.64 KB | 0755 |
|
| tcptracer-bpfcc | File | 17.71 KB | 0755 |
|
| telinit | File | 1.43 MB | 0755 |
|
| thermald | File | 526.73 KB | 0755 |
|
| thin_check | File | 1.36 MB | 0755 |
|
| thin_delta | File | 1.36 MB | 0755 |
|
| thin_dump | File | 1.36 MB | 0755 |
|
| thin_ls | File | 1.36 MB | 0755 |
|
| thin_metadata_size | File | 1.36 MB | 0755 |
|
| thin_repair | File | 1.36 MB | 0755 |
|
| thin_restore | File | 1.36 MB | 0755 |
|
| thin_rmap | File | 1.36 MB | 0755 |
|
| thin_trim | File | 1.36 MB | 0755 |
|
| threadsnoop-bpfcc | File | 1.81 KB | 0755 |
|
| threadsnoop.bt | File | 712 B | 0755 |
|
| tipc | File | 90.52 KB | 0755 |
|
| tplist-bpfcc | File | 4.06 KB | 0755 |
|
| trace-bpfcc | File | 42.86 KB | 0755 |
|
| tsig-keygen | File | 22.3 KB | 0755 |
|
| ttysnoop-bpfcc | File | 7.51 KB | 0755 |
|
| tune2fs | File | 110.56 KB | 0755 |
|
| u-d-c-print-pci-ids | File | 517 B | 0755 |
|
| ucalls | File | 11.69 KB | 0755 |
|
| uflow | File | 7.92 KB | 0755 |
|
| ugc | File | 7.64 KB | 0755 |
|
| umount.udisks2 | File | 14.3 KB | 0755 |
|
| undump.bt | File | 789 B | 0755 |
|
| unix_chkpwd | File | 30.31 KB | 2755 |
|
| unix_update | File | 34.31 KB | 0755 |
|
| uobjnew | File | 6.04 KB | 0755 |
|
| update-ca-certificates | File | 5.32 KB | 0755 |
|
| update-catalog | File | 9.17 KB | 0755 |
|
| update-fonts-alias | File | 5.71 KB | 0755 |
|
| update-fonts-dir | File | 3.98 KB | 0755 |
|
| update-fonts-scale | File | 6.1 KB | 0755 |
|
| update-grub | File | 64 B | 0755 |
|
| update-grub-gfxpayload | File | 301 B | 0755 |
|
| update-grub2 | File | 64 B | 0755 |
|
| update-gsfontmap | File | 390 B | 0755 |
|
| update-ieee-data | File | 3.41 KB | 0755 |
|
| update-info-dir | File | 1.66 KB | 0755 |
|
| update-initramfs | File | 6.75 KB | 0755 |
|
| update-locale | File | 2.99 KB | 0755 |
|
| update-passwd | File | 34.56 KB | 0755 |
|
| update-pciids | File | 1.74 KB | 0755 |
|
| update-rc.d | File | 17.72 KB | 0755 |
|
| update-shells | File | 3.89 KB | 0755 |
|
| update-xmlcatalog | File | 16.88 KB | 0755 |
|
| upgrade-from-grub-legacy | File | 1.56 KB | 0755 |
|
| usb_modeswitch | File | 59.66 KB | 0755 |
|
| usb_modeswitch_dispatcher | File | 26.78 KB | 0755 |
|
| usbmuxd | File | 90.6 KB | 0755 |
|
| useradd | File | 139.88 KB | 0755 |
|
| userdel | File | 91.01 KB | 0755 |
|
| usermod | File | 127.65 KB | 0755 |
|
| ustat | File | 12.12 KB | 0755 |
|
| uthreads | File | 4 KB | 0755 |
|
| uuidd | File | 30.88 KB | 0755 |
|
| validlocale | File | 1.73 KB | 0755 |
|
| vcstime | File | 14.3 KB | 0755 |
|
| vdpa | File | 34.56 KB | 0755 |
|
| veritysetup | File | 43.94 KB | 0755 |
|
| vfscount-bpfcc | File | 1.36 KB | 0755 |
|
| vfscount.bt | File | 515 B | 0755 |
|
| vfsstat-bpfcc | File | 4.06 KB | 0755 |
|
| vfsstat.bt | File | 721 B | 0755 |
|
| vgcfgbackup | File | 3.01 MB | 0755 |
|
| vgcfgrestore | File | 3.01 MB | 0755 |
|
| vgchange | File | 3.01 MB | 0755 |
|
| vgck | File | 3.01 MB | 0755 |
|
| vgconvert | File | 3.01 MB | 0755 |
|
| vgcreate | File | 3.01 MB | 0755 |
|
| vgdisplay | File | 3.01 MB | 0755 |
|
| vgexport | File | 3.01 MB | 0755 |
|
| vgextend | File | 3.01 MB | 0755 |
|
| vgimport | File | 3.01 MB | 0755 |
|
| vgimportclone | File | 3.01 MB | 0755 |
|
| vgmerge | File | 3.01 MB | 0755 |
|
| vgmknodes | File | 3.01 MB | 0755 |
|
| vgreduce | File | 3.01 MB | 0755 |
|
| vgremove | File | 3.01 MB | 0755 |
|
| vgrename | File | 3.01 MB | 0755 |
|
| vgs | File | 3.01 MB | 0755 |
|
| vgscan | File | 3.01 MB | 0755 |
|
| vgsplit | File | 3.01 MB | 0755 |
|
| vigr | File | 60.69 KB | 0755 |
|
| vipw | File | 60.69 KB | 0755 |
|
| virtiostat-bpfcc | File | 8.69 KB | 0755 |
|
| visudo | File | 252.71 KB | 0755 |
|
| vpddecode | File | 14.58 KB | 0755 |
|
| wakeuptime-bpfcc | File | 8.1 KB | 0755 |
|
| wipefs | File | 38.38 KB | 0755 |
|
| writeback.bt | File | 1.66 KB | 0755 |
|
| xfs_admin | File | 2.12 KB | 0755 |
|
| xfs_bmap | File | 695 B | 0755 |
|
| xfs_copy | File | 90.44 KB | 0755 |
|
| xfs_db | File | 688.56 KB | 0755 |
|
| xfs_estimate | File | 14.16 KB | 0755 |
|
| xfs_freeze | File | 800 B | 0755 |
|
| xfs_fsr | File | 42.18 KB | 0755 |
|
| xfs_growfs | File | 38.23 KB | 0755 |
|
| xfs_info | File | 1.26 KB | 0755 |
|
| xfs_io | File | 203.65 KB | 0755 |
|
| xfs_logprint | File | 78.27 KB | 0755 |
|
| xfs_mdrestore | File | 34.23 KB | 0755 |
|
| xfs_metadump | File | 816 B | 0755 |
|
| xfs_mkfile | File | 1.02 KB | 0755 |
|
| xfs_ncheck | File | 685 B | 0755 |
|
| xfs_quota | File | 90.16 KB | 0755 |
|
| xfs_repair | File | 643.32 KB | 0755 |
|
| xfs_rtcp | File | 18.15 KB | 0755 |
|
| xfs_scrub | File | 106.27 KB | 0755 |
|
| xfs_scrub_all | File | 7.66 KB | 0755 |
|
| xfs_spaceman | File | 42.3 KB | 0755 |
|
| xfsdist-bpfcc | File | 4.61 KB | 0755 |
|
| xfsdist.bt | File | 972 B | 0755 |
|
| xfsslower-bpfcc | File | 7.78 KB | 0755 |
|
| xtables-legacy-multi | File | 92.95 KB | 0755 |
|
| xtables-monitor | File | 219.16 KB | 0755 |
|
| xtables-nft-multi | File | 219.16 KB | 0755 |
|
| zerofree | File | 14.15 KB | 0755 |
|
| zfsdist-bpfcc | File | 5.3 KB | 0755 |
|
| zfsslower-bpfcc | File | 8.45 KB | 0755 |
|
| zic | File | 66.39 KB | 0755 |
|
| zramctl | File | 54.52 KB | 0755 |
|