您好,本站仅作演示所用,请勿下单付款!
商品分类

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

陪太子读书:ChatGPT4.0

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

BCC is a toolkit for creating efficient kernel tracing and manipulation programs, and includes several useful tools and examples. It makes use of extended BPF (Berkeley Packet Filters), formally known as eBPF, a new feature that was first added to Linux 3.15. Much of what BCC uses requires Linux 4.1 and above.

BCC 是一个用于创建高效内核跟踪和处理程序的工具包,它包含几个有用的工具和示例。它使用扩展的 BPF(Berkeley Packet Filters),正式名称为 eBPF,这是 Linux 3.15 中首次添加的一项新功能。BCC 使用的大部分内容都需要 Linux 4.1 及更高版本。

One of the more interesting features in this cycle is the ability to attach eBPF programs (user-defined, sandboxed bytecode executed by the kernel) to kprobes. This allows user-defined instrumentation on a live kernel image that can never crash, hang or interfere with the kernel negatively.

这个循环中更有趣的功能之一是能够将 eBPF 程序(用户定义的、由内核执行的沙箱字节码)附加到 kprobes。这允许对 live kernel 映像进行用户定义的插桩,该映像永远不会崩溃、挂起或对内核产生负面影响。

BCC makes BPF programs easier to write, with kernel instrumentation in C (and includes a C wrapper around LLVM), and front-ends in Python and lua. It is suited for many tasks, including performance analysis and network traffic control.

BCC 使 BPF 程序更易于编写,具有 C 语言的内核插桩(包括围绕 LLVM 的 C 包装器)以及 Python 和 lua 的前端。它适用于许多任务,包括性能分析和网络流量控制。

This example traces a disk I/O kernel function, and populates an in-kernel power-of-2 histogram of the I/O size. For efficiency, only the histogram summary is returned to user-level.

此示例跟踪磁盘 I/O 内核函数,并填充 I/O 大小的内核内 2 次方直方图。为了提高效率,仅将直方图摘要返回到用户级别。

eBPF linux tools

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

BCC ====> BCC – Tools for BPF-based Linux IO analysis, networking, monitoring, and more

检测内核是否支持, eBPF 的内核编译.

zcat /proc/config.gz | grep bpf

幽兰本的 eBPF的选项 几乎全开.

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

以上是幽兰的版本的 系统信息.

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

Install build dependencies


# For Noble Numbat (24.04)
sudo apt install -y zip bison build-essential cmake flex git libedit-dev \
  libllvm18 llvm-18-dev libclang-18-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \
  liblzma-dev libdebuginfod-dev arping netperf iperf libpolly-18-dev

Install and compile BCC

git clone https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build
cmake ..
make
sudo make install
cmake -DPYTHON_CMD=python3 .. # build python3 binding
pushd src/python/
make
sudo make install
popd

bpftrace: 前端

bpftrace is a high-level tracing language for Linux. bpftrace uses LLVM as a backend to compile scripts to eBPF-bytecode and makes use of libbpf and bcc for interacting with the Linux BPF subsystem, as well as existing Linux tracing capabilities: kernel dynamic tracing (kprobes), user-level dynamic tracing (uprobes), tracepoints, etc. The bpftrace language is inspired by awk, C, and predecessor tracers such as DTrace and SystemTap. bpftrace was created by Alastair Robertson.

bpftrace 是 Linux 的高级跟踪语言。bpftrace 使用 LLVM 作为后端将脚本编译为 eBPF 字节码,并利用 libbpf 和 bcc 与 Linux BPF 子系统以及现有的 Linux 跟踪功能进行交互:内核动态跟踪 (kprobes)、用户级动态跟踪 (uprobes)、跟踪点等。bpftrace 语言的灵感来自 awk、C 和以前的跟踪器,例如 DTrace 和 SystemTap。bpftrace 由 Alastair Robertson 创建。

bpftrace 定位和 lua , python 使用一样的.

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

安装了 bcc-lua 的前端. /usr/share/类似我们 / program files 这个 目录 , 程序一般安装在这个地方. 用户的共享文件里面 .

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

这是 bcc的一些工具.

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

还有工具配套的文档.

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

等会儿,看看这里又什么绑定.

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

编译了一些 二进制工具.

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

还有一些共享库

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

开发中, 一定会用到这些的头文件.

你要编译,写自己的, eBPF开发的时候,就会用到这个东西. 你没有的时候, 编译就会报错.

所谓的搞逆向,就是把你眼前的所有的东西,全部记住.

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

把python的脚本, 编译为二进制, 的pyc 文件.

开始第一个案例 hello world

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

opensnoop:监控Linux,(云手机)app内部所有open操作

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

等他开完了我再加入.

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

什么是系统调用

是系统内核提供给上层应用的一个交互接口, 内核对用户层,提供的一种抽象的服务.

Linux系统调用是应用程序与操作系统内核交互的基本方式。它们是一组由内核提供的函数,允许用户空间的程序请求内核为它们执行各种低级操作,这些操作通常是应用程序无法直接执行的。

系统调用的作用

系统调用充当用户空间和内核空间之间的接口。常见的系统调用功能包括:

文件操作: 打开、读取、写入和关闭文件。

进程控制: 创建新进程(例如fork0)、执行新程序(例如exec0)和进程结束

通信: 通过管道、信号、共享内存和套接字进行进程间通信。

内存管理: 分配和释放内存(例如malloc0和free0在底层使用系统调用)。

设备操作: 访问和控制硬件设备。

安卓的架构有哪些

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下
06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

这个 libssl.so这个库,位于 docker 的安卓镜像的 内部. …

我们如果要抓包 ,我们需要 hook 这个so 内部的 ssl_Read 和 ssl_Write 这个函数.

eCapture 抓包: hook的是libssl.so位于安卓的框架库,所以在宿主机上是抓不到的

http-parse-complete.py

https://github.com/iovisor/bcc/blob/master/examples/networking/http_filter/http-parse-complete.py

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

看来,还找到了这个地方了.

# initialize BPF
b = BPF(text=bpf_text)
if not is_support_kfunc:
    b.attach_kprobe(event=fnname_open, fn_name="syscall__trace_entry_open")
    b.attach_kretprobe(event=fnname_open, fn_name="trace_return")

    b.attach_kprobe(event=fnname_openat, fn_name="syscall__trace_entry_openat")
    b.attach_kretprobe(event=fnname_openat, fn_name="trace_return")

    if fnname_openat2:
        b.attach_kprobe(event=fnname_openat2, fn_name="syscall__trace_entry_openat2")
        b.attach_kretprobe(event=fnname_openat2, fn_name="trace_return")

initial_ts = 0

opensnoop.py

https://github.com/iovisor/bcc/blob/003b00374b052ed0da59776eb2be812fa1bbcb79/tools/opensnoop.py

所有的 syscall__trace_entry_openat2 都已经hook了.

xposed ,我们需要找到包, 再找到方法, 参数, 调用栈 ,返回值, Frida 学了这么久, 就是这么几件事情. 然后就是其他和java js 的就是这么几件事情. Frida , xposed 就是干的这么几件事情.

eBPF 能干就是 [系统调用] system_call , 其他的都是干不了.

安卓逆向 相关系统调用表 , 列举你所知道的, 高频率的

在 Android 逆向工程中,高频率使用的系统调用(syscall)主要涉及进程管理、内存操作、文件操作、网络通信等方面。以下是常见的高频系统调用列表:
1. 进程与线程管理

    fork - 创建子进程
    vfork - 创建子进程但不复制页表
    execve - 执行新程序
    clone - 创建线程或新进程
    getpid - 获取当前进程 ID
    getppid - 获取父进程 ID
    gettid - 获取当前线程 ID
    tgkill - 发送信号给特定线程(用于杀死进程或调试挂起)
    kill - 向进程发送信号

2. 内存管理

    mmap - 映射内存
    munmap - 解除内存映射
    mprotect - 修改内存页的权限(如可执行)
    brk - 调整堆的大小
    madvise - 内存访问建议,可能用于优化
    remap_file_pages - 重新映射文件页(可能用于代码隐藏)

3. 文件系统操作

    openat / open - 打开文件
    read / write - 读写文件
    lseek - 调整文件偏移量
    stat / fstat - 获取文件信息
    mmap - 通过文件映射共享内存
    unlink - 删除文件
    rename - 重命名文件
    ioctl - 对设备执行 I/O 操作(常用于 /dev/ashmem、Binder 相关操作)

4. 网络操作

    socket - 创建套接字
    connect - 连接到远程服务器
    bind - 绑定本地地址
    listen - 监听端口
    accept - 接受连接
    send / recv - 发送和接收数据
    sendto / recvfrom - UDP 相关操作
    getsockopt / setsockopt - 获取或设置套接字选项
    poll / select / epoll_wait - 监听多个文件描述符

5. 时间相关

    gettimeofday - 获取当前时间
    clock_gettime - 获取高精度时间戳(用于时间检测或反调试)
    nanosleep - 线程休眠

6. 权限与安全

    getuid / geteuid - 获取用户 ID(用于权限检测)
    setuid - 设置用户 ID(提权相关)
    prctl - 进程控制(常用于隐藏进程信息,如 PR_SET_NAME 修改进程名)
    seccomp - 配置系统调用过滤(常用于沙盒安全策略)

7. Binder 相关

    ioctl - Binder 通信核心
    mmap - 用于 Binder 共享内存
    write / read - 发送/接收 Binder 消息
    poll - 监听 Binder 事件

这些系统调用在 Android 逆向过程中会频繁出现,尤其是在 ptrace 反调试、mmap 加载 dex 文件、execve 进程替换等场景下。
如果你有特定分析目标,可以关注相关的 strace 或 frida hook 这些 syscall 来进行拦截分析。
# initialize BPF
b = BPF(text=bpf_text)   # b . 这里代表的是  ebfp 
if not is_support_kfunc:
    b.attach_kprobe(event=fnname_open, fn_name="syscall__trace_entry_open") // 和x86架构的调用表, 并不一样. 
    b.attach_kretprobe(event=fnname_open, fn_name="trace_return")

    b.attach_kprobe(event=fnname_openat, fn_name="syscall__trace_entry_openat")
    b.attach_kretprobe(event=fnname_openat, fn_name="trace_return")

    if fnname_openat2:
        b.attach_kprobe(event=fnname_openat2, fn_name="syscall__trace_entry_openat2")
        b.attach_kretprobe(event=fnname_openat2, fn_name="trace_return")

initial_ts = 0

x86 的syscall 和 arm64 的调用表 并不相同.

06(07).幽兰代码本上用ChatGPT4.0学习eBPF_BCC_opensnoop上.下

Calling Conventions /arm64

archsyscall NRreturnarg0arg1arg2arg3arg4arg5
armr7r0r0r1r2r3r4r5
arm64x8x0x0x1x2x3x4x5
x86eaxeaxebxecxedxesiediebp
x86_64raxraxrdirsirdxr10r8r9

Table /arm64

NRsyscall namereferences%x8arg0 (%x0)arg1 (%x1)arg2 (%x2)arg3 (%x3)arg4 (%x4)arg5 (%x5)
0io_setupman/ cs/0x00unsigned nr_reqsaio_context_t *ctx––––
1io_destroyman/ cs/0x01aio_context_t ctx–––––
2io_submitman/ cs/0x02aio_context_tlongstruct iocb * *–––
3io_cancelman/ cs/0x03aio_context_t ctx_idstruct iocb *iocbstruct io_event *result–––
4io_geteventsman/ cs/0x04aio_context_t ctx_idlong min_nrlong nrstruct io_event *eventsstruct __kernel_timespec *timeout–
5setxattrman/ cs/0x05const char *pathconst char *nameconst void *valuesize_t sizeint flags–
6lsetxattrman/ cs/0x06const char *pathconst char *nameconst void *valuesize_t sizeint flags–
7fsetxattrman/ cs/0x07int fdconst char *nameconst void *valuesize_t sizeint flags–
8getxattrman/ cs/0x08const char *pathconst char *namevoid *valuesize_t size––
9lgetxattrman/ cs/0x09const char *pathconst char *namevoid *valuesize_t size––
10fgetxattrman/ cs/0x0aint fdconst char *namevoid *valuesize_t size––
11listxattrman/ cs/0x0bconst char *pathchar *listsize_t size–––
12llistxattrman/ cs/0x0cconst char *pathchar *listsize_t size–––
13flistxattrman/ cs/0x0dint fdchar *listsize_t size–––
14removexattrman/ cs/0x0econst char *pathconst char *name––––
15lremovexattrman/ cs/0x0fconst char *pathconst char *name––––
16fremovexattrman/ cs/0x10int fdconst char *name––––
17getcwdman/ cs/0x11char *bufunsigned long size––––
18lookup_dcookieman/ cs/0x12u64 cookie64char *bufsize_t len–––
19eventfd2man/ cs/0x13unsigned int countint flags––––
20epoll_create1man/ cs/0x14int flags–––––
21epoll_ctlman/ cs/0x15int epfdint opint fdstruct epoll_event *event––
22epoll_pwaitman/ cs/0x16int epfdstruct epoll_event *eventsint maxeventsint timeoutconst sigset_t *sigmasksize_t sigsetsize
23dupman/ cs/0x17unsigned int fildes–––––
24dup3man/ cs/0x18unsigned int oldfdunsigned int newfdint flags–––
25fcntlman/ cs/0x19unsigned int fdunsigned int cmdunsigned long arg–––
26inotify_init1man/ cs/0x1aint flags–––––
27inotify_add_watchman/ cs/0x1bint fdconst char *pathu32 mask–––
28inotify_rm_watchman/ cs/0x1cint fd__s32 wd––––
29ioctlman/ cs/0x1dunsigned int fdunsigned int cmdunsigned long arg–––
30ioprio_setman/ cs/0x1eint whichint whoint ioprio–––
31ioprio_getman/ cs/0x1fint whichint who––––
32flockman/ cs/0x20unsigned int fdunsigned int cmd––––
33mknodatman/ cs/0x21int dfdconst char * filenameumode_t modeunsigned dev––
34mkdiratman/ cs/0x22int dfdconst char * pathnameumode_t mode–––
35unlinkatman/ cs/0x23int dfdconst char * pathnameint flag–––
36symlinkatman/ cs/0x24const char * oldnameint newdfdconst char * newname–––
37linkatman/ cs/0x25int olddfdconst char *oldnameint newdfdconst char *newnameint flags–
38renameatman/ cs/0x26int olddfdconst char * oldnameint newdfdconst char * newname––
39umount2man/ cs/0x27??????
40mountman/ cs/0x28char *dev_namechar *dir_namechar *typeunsigned long flagsvoid *data–
41pivot_rootman/ cs/0x29const char *new_rootconst char *put_old––––
42nfsservctlman/ cs/0x2a??????
43statfsman/ cs/0x2bconst char * pathstruct statfs *buf––––
44fstatfsman/ cs/0x2cunsigned int fdstruct statfs *buf––––
45truncateman/ cs/0x2dconst char *pathlong length––––
46ftruncateman/ cs/0x2eunsigned int fdunsigned long length––––
47fallocateman/ cs/0x2fint fdint modeloff_t offsetloff_t len––
48faccessatman/ cs/0x30int dfdconst char *filenameint mode–––
49chdirman/ cs/0x31const char *filename–––––
50fchdirman/ cs/0x32unsigned int fd–––––
51chrootman/ cs/0x33const char *filename–––––
52fchmodman/ cs/0x34unsigned int fdumode_t mode––––
53fchmodatman/ cs/0x35int dfdconst char * filenameumode_t mode–––
54fchownatman/ cs/0x36int dfdconst char *filenameuid_t usergid_t groupint flag–
55fchownman/ cs/0x37unsigned int fduid_t usergid_t group–––
56openatman/ cs/0x38int dfdconst char *filenameint flagsumode_t mode––
57closeman/ cs/0x39unsigned int fd–––––
58vhangupman/ cs/0x3a––––––
59pipe2man/ cs/0x3bint *fildesint flags––––
60quotactlman/ cs/0x3cunsigned int cmdconst char *specialqid_t idvoid *addr––
61getdents64man/ cs/0x3dunsigned int fdstruct linux_dirent64 *direntunsigned int count–––
62lseekman/ cs/0x3eunsigned int fdoff_t offsetunsigned int whence–––
63readman/ cs/0x3funsigned int fdchar *bufsize_t count–––
64writeman/ cs/0x40unsigned int fdconst char *bufsize_t count–––
65readvman/ cs/0x41unsigned long fdconst struct iovec *vecunsigned long vlen–––
66writevman/ cs/0x42unsigned long fdconst struct iovec *vecunsigned long vlen–––
67pread64man/ cs/0x43unsigned int fdchar *bufsize_t countloff_t pos––
68pwrite64man/ cs/0x44unsigned int fdconst char *bufsize_t countloff_t pos––
69preadvman/ cs/0x45unsigned long fdconst struct iovec *vecunsigned long vlenunsigned long pos_lunsigned long pos_h–
70pwritevman/ cs/0x46unsigned long fdconst struct iovec *vecunsigned long vlenunsigned long pos_lunsigned long pos_h–
71sendfileman/ cs/0x47int out_fdint in_fdoff_t *offsetsize_t count––
72pselect6man/ cs/0x48intfd_set *fd_set *fd_set *struct __kernel_timespec *void *
73ppollman/ cs/0x49struct pollfd *unsigned intstruct __kernel_timespec *const sigset_t *size_t–
74signalfd4man/ cs/0x4aint ufdsigset_t *user_masksize_t sizemaskint flags––
75vmspliceman/ cs/0x4bint fdconst struct iovec *iovunsigned long nr_segsunsigned int flags––
76spliceman/ cs/0x4cint fd_inloff_t *off_inint fd_outloff_t *off_outsize_t lenunsigned int flags
77teeman/ cs/0x4dint fdinint fdoutsize_t lenunsigned int flags––
78readlinkatman/ cs/0x4eint dfdconst char *pathchar *bufint bufsiz––
79newfstatatman/ cs/0x4fint dfdconst char *filenamestruct stat *statbufint flag––
80fstatman/ cs/0x50unsigned int fdstruct __old_kernel_stat *statbuf––––
81syncman/ cs/0x51––––––
82fsyncman/ cs/0x52unsigned int fd–––––
83fdatasyncman/ cs/0x53unsigned int fd–––––
84sync_file_rangeman/ cs/0x54int fdloff_t offsetloff_t nbytesunsigned int flags––
85timerfd_createman/ cs/0x55int clockidint flags––––
86timerfd_settimeman/ cs/0x56int ufdint flagsconst struct __kernel_itimerspec *utmrstruct __kernel_itimerspec *otmr––
87timerfd_gettimeman/ cs/0x57int ufdstruct __kernel_itimerspec *otmr––––
88utimensatman/ cs/0x58int dfdconst char *filenamestruct __kernel_timespec *utimesint flags––
89acctman/ cs/0x59const char *name–––––
90capgetman/ cs/0x5acap_user_header_t headercap_user_data_t dataptr––––
91capsetman/ cs/0x5bcap_user_header_t headerconst cap_user_data_t data––––
92personalityman/ cs/0x5cunsigned int personality–––––
93exitman/ cs/0x5dint error_code–––––
94exit_groupman/ cs/0x5eint error_code–––––
95waitidman/ cs/0x5fint whichpid_t pidstruct siginfo *infopint optionsstruct rusage *ru–
96set_tid_addressman/ cs/0x60int *tidptr–––––
97unshareman/ cs/0x61unsigned long unshare_flags–––––
98futexman/ cs/0x62u32 *uaddrint opu32 valconst struct __kernel_timespec *utimeu32 *uaddr2u32 val3
99set_robust_listman/ cs/0x63struct robust_list_head *headsize_t len––––
100get_robust_listman/ cs/0x64int pidstruct robust_list_head * *head_ptrsize_t *len_ptr–––
101nanosleepman/ cs/0x65struct __kernel_timespec *rqtpstruct __kernel_timespec *rmtp––––
102getitimerman/ cs/0x66int whichstruct __kernel_old_itimerval *value––––
103setitimerman/ cs/0x67int whichstruct __kernel_old_itimerval *valuestruct __kernel_old_itimerval *ovalue–––
104kexec_loadman/ cs/0x68unsigned long entryunsigned long nr_segmentsstruct kexec_segment *segmentsunsigned long flags––
105init_moduleman/ cs/0x69void *umodunsigned long lenconst char *uargs–––
106delete_moduleman/ cs/0x6aconst char *name_userunsigned int flags––––
107timer_createman/ cs/0x6bclockid_t which_clockstruct sigevent *timer_event_spectimer_t * created_timer_id–––
108timer_gettimeman/ cs/0x6ctimer_t timer_idstruct __kernel_itimerspec *setting––––
109timer_getoverrunman/ cs/0x6dtimer_t timer_id–––––
110timer_settimeman/ cs/0x6etimer_t timer_idint flagsconst struct __kernel_itimerspec *new_settingstruct __kernel_itimerspec *old_setting––
111timer_deleteman/ cs/0x6ftimer_t timer_id–––––
112clock_settimeman/ cs/0x70clockid_t which_clockconst struct __kernel_timespec *tp––––
113clock_gettimeman/ cs/0x71clockid_t which_clockstruct __kernel_timespec *tp––––
114clock_getresman/ cs/0x72clockid_t which_clockstruct __kernel_timespec *tp––––
115clock_nanosleepman/ cs/0x73clockid_t which_clockint flagsconst struct __kernel_timespec *rqtpstruct __kernel_timespec *rmtp––
116syslogman/ cs/0x74int typechar *bufint len–––
117ptraceman/ cs/0x75long requestlong pidunsigned long addrunsigned long data––
118sched_setparamman/ cs/0x76pid_t pidstruct sched_param *param––––
119sched_setschedulerman/ cs/0x77pid_t pidint policystruct sched_param *param–––
120sched_getschedulerman/ cs/0x78pid_t pid–––––
121sched_getparamman/ cs/0x79pid_t pidstruct sched_param *param––––
122sched_setaffinityman/ cs/0x7apid_t pidunsigned int lenunsigned long *user_mask_ptr–––
123sched_getaffinityman/ cs/0x7bpid_t pidunsigned int lenunsigned long *user_mask_ptr–––
124sched_yieldman/ cs/0x7c––––––
125sched_get_priority_maxman/ cs/0x7dint policy–––––
126sched_get_priority_minman/ cs/0x7eint policy–––––
127sched_rr_get_intervalman/ cs/0x7fpid_t pidstruct __kernel_timespec *interval––––
128restart_syscallman/ cs/0x80––––––
129killman/ cs/0x81pid_t pidint sig––––
130tkillman/ cs/0x82pid_t pidint sig––––
131tgkillman/ cs/0x83pid_t tgidpid_t pidint sig–––
132sigaltstackman/ cs/0x84const struct sigaltstack *ussstruct sigaltstack *uoss––––
133rt_sigsuspendman/ cs/0x85sigset_t *unewsetsize_t sigsetsize––––
134rt_sigactionman/ cs/0x86intconst struct sigaction *struct sigaction *size_t––
135rt_sigprocmaskman/ cs/0x87int howsigset_t *setsigset_t *osetsize_t sigsetsize––
136rt_sigpendingman/ cs/0x88sigset_t *setsize_t sigsetsize––––
137rt_sigtimedwaitman/ cs/0x89const sigset_t *uthesesiginfo_t *uinfoconst struct __kernel_timespec *utssize_t sigsetsize––
138rt_sigqueueinfoman/ cs/0x8apid_t pidint sigsiginfo_t *uinfo–––
139rt_sigreturnman/ cs/0x8b??????
140setpriorityman/ cs/0x8cint whichint whoint niceval–––
141getpriorityman/ cs/0x8dint whichint who––––
142rebootman/ cs/0x8eint magic1int magic2unsigned int cmdvoid *arg––
143setregidman/ cs/0x8fgid_t rgidgid_t egid––––
144setgidman/ cs/0x90gid_t gid–––––
145setreuidman/ cs/0x91uid_t ruiduid_t euid––––
146setuidman/ cs/0x92uid_t uid–––––
147setresuidman/ cs/0x93uid_t ruiduid_t euiduid_t suid–––
148getresuidman/ cs/0x94uid_t *ruiduid_t *euiduid_t *suid–––
149setresgidman/ cs/0x95gid_t rgidgid_t egidgid_t sgid–––
150getresgidman/ cs/0x96gid_t *rgidgid_t *egidgid_t *sgid–––
151setfsuidman/ cs/0x97uid_t uid–––––
152setfsgidman/ cs/0x98gid_t gid–––––
153timesman/ cs/0x99struct tms *tbuf–––––
154setpgidman/ cs/0x9apid_t pidpid_t pgid––––
155getpgidman/ cs/0x9bpid_t pid–––––
156getsidman/ cs/0x9cpid_t pid–––––
157setsidman/ cs/0x9d––––––
158getgroupsman/ cs/0x9eint gidsetsizegid_t *grouplist––––
159setgroupsman/ cs/0x9fint gidsetsizegid_t *grouplist––––
160unameman/ cs/0xa0struct old_utsname *–––––
161sethostnameman/ cs/0xa1char *nameint len––––
162setdomainnameman/ cs/0xa2char *nameint len––––
163getrlimitman/ cs/0xa3unsigned int resourcestruct rlimit *rlim––––
164setrlimitman/ cs/0xa4unsigned int resourcestruct rlimit *rlim––––
165getrusageman/ cs/0xa5int whostruct rusage *ru––––
166umaskman/ cs/0xa6int mask–––––
167prctlman/ cs/0xa7int optionunsigned long arg2unsigned long arg3unsigned long arg4unsigned long arg5–
168getcpuman/ cs/0xa8unsigned *cpuunsigned *nodestruct getcpu_cache *cache–––
169gettimeofdayman/ cs/0xa9struct __kernel_old_timeval *tvstruct timezone *tz––––
170settimeofdayman/ cs/0xaastruct __kernel_old_timeval *tvstruct timezone *tz––––
171adjtimexman/ cs/0xabstruct __kernel_timex *txc_p–––––
172getpidman/ cs/0xac––––––
173getppidman/ cs/0xad––––––
174getuidman/ cs/0xae––––––
175geteuidman/ cs/0xaf––––––
176getgidman/ cs/0xb0––––––
177getegidman/ cs/0xb1––––––
178gettidman/ cs/0xb2––––––
179sysinfoman/ cs/0xb3struct sysinfo *info–––––
180mq_openman/ cs/0xb4const char *nameint oflagumode_t modestruct mq_attr *attr––
181mq_unlinkman/ cs/0xb5const char *name–––––
182mq_timedsendman/ cs/0xb6mqd_t mqdesconst char *msg_ptrsize_t msg_lenunsigned int msg_prioconst struct __kernel_timespec *abs_timeout–
183mq_timedreceiveman/ cs/0xb7mqd_t mqdeschar *msg_ptrsize_t msg_lenunsigned int *msg_prioconst struct __kernel_timespec *abs_timeout–
184mq_notifyman/ cs/0xb8mqd_t mqdesconst struct sigevent *notification––––
185mq_getsetattrman/ cs/0xb9mqd_t mqdesconst struct mq_attr *mqstatstruct mq_attr *omqstat–––
186msggetman/ cs/0xbakey_t keyint msgflg––––
187msgctlman/ cs/0xbbint msqidint cmdstruct msqid_ds *buf–––
188msgrcvman/ cs/0xbcint msqidstruct msgbuf *msgpsize_t msgszlong msgtypint msgflg–
189msgsndman/ cs/0xbdint msqidstruct msgbuf *msgpsize_t msgszint msgflg––
190semgetman/ cs/0xbekey_t keyint nsemsint semflg–––
191semctlman/ cs/0xbfint semidint semnumint cmdunsigned long arg––
192semtimedopman/ cs/0xc0int semidstruct sembuf *sopsunsigned nsopsconst struct __kernel_timespec *timeout––
193semopman/ cs/0xc1int semidstruct sembuf *sopsunsigned nsops–––
194shmgetman/ cs/0xc2key_t keysize_t sizeint flag–––
195shmctlman/ cs/0xc3int shmidint cmdstruct shmid_ds *buf–––
196shmatman/ cs/0xc4int shmidchar *shmaddrint shmflg–––
197shmdtman/ cs/0xc5char *shmaddr–––––
198socketman/ cs/0xc6intintint–––
199socketpairman/ cs/0xc7intintintint *––
200bindman/ cs/0xc8intstruct sockaddr *int–––
201listenman/ cs/0xc9intint––––
202acceptman/ cs/0xcaintstruct sockaddr *int *–––
203connectman/ cs/0xcbintstruct sockaddr *int–––
204getsocknameman/ cs/0xccintstruct sockaddr *int *–––
205getpeernameman/ cs/0xcdintstruct sockaddr *int *–––
206sendtoman/ cs/0xceintvoid *size_tunsignedstruct sockaddr *int
207recvfromman/ cs/0xcfintvoid *size_tunsignedstruct sockaddr *int *
208setsockoptman/ cs/0xd0int fdint levelint optnamechar *optvalint optlen–
209getsockoptman/ cs/0xd1int fdint levelint optnamechar *optvalint *optlen–
210shutdownman/ cs/0xd2intint––––
211sendmsgman/ cs/0xd3int fdstruct user_msghdr *msgunsigned flags–––
212recvmsgman/ cs/0xd4int fdstruct user_msghdr *msgunsigned flags–––
213readaheadman/ cs/0xd5int fdloff_t offsetsize_t count–––
214brkman/ cs/0xd6unsigned long brk–––––
215munmapman/ cs/0xd7unsigned long addrsize_t len––––
216mremapman/ cs/0xd8unsigned long addrunsigned long old_lenunsigned long new_lenunsigned long flagsunsigned long new_addr–
217add_keyman/ cs/0xd9const char *_typeconst char *_descriptionconst void *_payloadsize_t plenkey_serial_t destringid–
218request_keyman/ cs/0xdaconst char *_typeconst char *_descriptionconst char *_callout_infokey_serial_t destringid––
219keyctlman/ cs/0xdbint cmdunsigned long arg2unsigned long arg3unsigned long arg4unsigned long arg5–
220cloneman/ cs/0xdcunsigned longunsigned longint *int *unsigned long–
221execveman/ cs/0xddconst char *filenameconst char *const *argvconst char *const *envp–––
222mmapman/ cs/0xde??????
223fadvise64man/ cs/0xdfint fdloff_t offsetsize_t lenint advice––
224swaponman/ cs/0xe0const char *specialfileint swap_flags––––
225swapoffman/ cs/0xe1const char *specialfile–––––
226mprotectman/ cs/0xe2unsigned long startsize_t lenunsigned long prot–––
227msyncman/ cs/0xe3unsigned long startsize_t lenint flags–––
228mlockman/ cs/0xe4unsigned long startsize_t len––––
229munlockman/ cs/0xe5unsigned long startsize_t len––––
230mlockallman/ cs/0xe6int flags–––––
231munlockallman/ cs/0xe7––––––
232mincoreman/ cs/0xe8unsigned long startsize_t lenunsigned char * vec–––
233madviseman/ cs/0xe9unsigned long startsize_t lenint behavior–––
234remap_file_pagesman/ cs/0xeaunsigned long startunsigned long sizeunsigned long protunsigned long pgoffunsigned long flags–
235mbindman/ cs/0xebunsigned long startunsigned long lenunsigned long modeconst unsigned long *nmaskunsigned long maxnodeunsigned flags
236get_mempolicyman/ cs/0xecint *policyunsigned long *nmaskunsigned long maxnodeunsigned long addrunsigned long flags–
237set_mempolicyman/ cs/0xedint modeconst unsigned long *nmaskunsigned long maxnode–––
238migrate_pagesman/ cs/0xeepid_t pidunsigned long maxnodeconst unsigned long *fromconst unsigned long *to––
239move_pagesman/ cs/0xefpid_t pidunsigned long nr_pagesconst void * *pagesconst int *nodesint *statusint flags
240rt_tgsigqueueinfoman/ cs/0xf0pid_t tgidpid_t pidint sigsiginfo_t *uinfo––
241perf_event_openman/ cs/0xf1struct perf_event_attr *attr_uptrpid_t pidint cpuint group_fdunsigned long flags–
242accept4man/ cs/0xf2intstruct sockaddr *int *int––
243recvmmsgman/ cs/0xf3int fdstruct mmsghdr *msgunsigned int vlenunsigned flagsstruct __kernel_timespec *timeout–
244not implemented0xf4
245not implemented0xf5
246not implemented0xf6
247not implemented0xf7
248not implemented0xf8
249not implemented0xf9
250not implemented0xfa
251not implemented0xfb
252not implemented0xfc
253not implemented0xfd
254not implemented0xfe
255not implemented0xff
256not implemented0x100
257not implemented0x101
258not implemented0x102
259not implemented0x103
260wait4man/ cs/0x104pid_t pidint *stat_addrint optionsstruct rusage *ru––
261prlimit64man/ cs/0x105pid_t pidunsigned int resourceconst struct rlimit64 *new_rlimstruct rlimit64 *old_rlim––
262fanotify_initman/ cs/0x106unsigned int flagsunsigned int event_f_flags––––
263fanotify_markman/ cs/0x107int fanotify_fdunsigned int flagsu64 maskint fdconst char *pathname–
264name_to_handle_atman/ cs/0x108int dfdconst char *namestruct file_handle *handleint *mnt_idint flag–
265open_by_handle_atman/ cs/0x109int mountdirfdstruct file_handle *handleint flags–––
266clock_adjtimeman/ cs/0x10aclockid_t which_clockstruct __kernel_timex *tx––––
267syncfsman/ cs/0x10bint fd–––––
268setnsman/ cs/0x10cint fdint nstype––––
269sendmmsgman/ cs/0x10dint fdstruct mmsghdr *msgunsigned int vlenunsigned flags––
270process_vm_readvman/ cs/0x10epid_t pidconst struct iovec *lvecunsigned long liovcntconst struct iovec *rvecunsigned long riovcntunsigned long flags
271process_vm_writevman/ cs/0x10fpid_t pidconst struct iovec *lvecunsigned long liovcntconst struct iovec *rvecunsigned long riovcntunsigned long flags
272kcmpman/ cs/0x110pid_t pid1pid_t pid2int typeunsigned long idx1unsigned long idx2–
273finit_moduleman/ cs/0x111int fdconst char *uargsint flags–––
274sched_setattrman/ cs/0x112pid_t pidstruct sched_attr *attrunsigned int flags–––
275sched_getattrman/ cs/0x113pid_t pidstruct sched_attr *attrunsigned int sizeunsigned int flags––
276renameat2man/ cs/0x114int olddfdconst char *oldnameint newdfdconst char *newnameunsigned int flags–
277seccompman/ cs/0x115unsigned int opunsigned int flagsvoid *uargs–––
278getrandomman/ cs/0x116char *bufsize_t countunsigned int flags–––
279memfd_createman/ cs/0x117const char *uname_ptrunsigned int flags––––
280bpfman/ cs/0x118int cmdunion bpf_attr *attrunsigned int size–––
281execveatman/ cs/0x119int dfdconst char *filenameconst char *const *argvconst char *const *envpint flags–
282userfaultfdman/ cs/0x11aint flags–––––
283membarrierman/ cs/0x11bint cmdunsigned int flagsint cpu_id–––
284mlock2man/ cs/0x11cunsigned long startsize_t lenint flags–––
285copy_file_rangeman/ cs/0x11dint fd_inloff_t *off_inint fd_outloff_t *off_outsize_t lenunsigned int flags
286preadv2man/ cs/0x11eunsigned long fdconst struct iovec *vecunsigned long vlenunsigned long pos_lunsigned long pos_hrwf_t flags
287pwritev2man/ cs/0x11funsigned long fdconst struct iovec *vecunsigned long vlenunsigned long pos_lunsigned long pos_hrwf_t flags
288pkey_mprotectman/ cs/0x120unsigned long startsize_t lenunsigned long protint pkey––
289pkey_allocman/ cs/0x121unsigned long flagsunsigned long init_val––––
290pkey_freeman/ cs/0x122int pkey–––––
291statxman/ cs/0x123int dfdconst char *pathunsigned flagsunsigned maskstruct statx *buffer–
425io_uring_setupman/ cs/0x1a9u32 entriesstruct io_uring_params *p––––
426io_uring_enterman/ cs/0x1aaunsigned int fdu32 to_submitu32 min_completeu32 flagsconst void *argpsize_t argsz
427not implemented0x1ab
428not implemented0x1ac
429not implemented0x1ad
430not implemented0x1ae
431not implemented0x1af
432not implemented0x1b0
433not implemented0x1b1
434not implemented0x1b2
435not implemented0x1b3
436not implemented0x1b4
437not implemented0x1b5
438not implemented0x1b6
439faccessat2man/ cs/0x1b7int dfdconst char *filenameint modeint flags––

源码的核心位置2

# process event
def print_event(cpu, data, size):
    event = b["events"].event(data)
    global initial_ts

    if not args.full_path or event.type == EventType.EVENT_END:
        skip = False

        # split return value into FD and errno columns
        if event.ret >= 0:
            fd_s = event.ret
            err = 0
        else:
            fd_s = -1
            err = - event.ret

        if not initial_ts:
            initial_ts = event.ts

        if args.failed and (event.ret >= 0):
            skip = True

        if args.name and bytes(args.name) not in event.comm:
            skip = True

        if not skip:
            if args.timestamp:
                delta = event.ts - initial_ts
                printb(b"%-14.9f" % (float(delta) / 1000000), nl="")

            if args.print_uid:
                printb(b"%-6d" % event.uid, nl="")

            printb(b"%-6d %-16s %4d %3d " %
                   (event.id & 0xffffffff if args.tid else event.id >> 32,
                    event.comm, fd_s, err), nl="")

            if args.extended_fields:
                printb(b"%08o " % event.flags, nl="")

            if not args.full_path:
                printb(b"%s" % event.name)
            else:
                paths = entries[event.id]
                paths.reverse()
                printb(b"%s" % os.path.join(*paths))

        if args.full_path:
            try:
                del(entries[event.id])
            except Exception:
                pass
    elif event.type == EventType.EVENT_ENTRY:
        entries[event.id].append(event.name)

内容全部复现, 全部深刻理解, 全部形成文档, 即可.

eBPF android tools

重要参考

https://github.com/iovisor/bcc/blob/master/INSTALL.md#ubuntu—source

https://github.com/bpftrace/

https://blog.xhyeax.com/2022/04/28/arm64-syscall-table/

https://github.com/iovisor/bcc/blob/003b00374b052ed0da59776eb2be812fa1bbcb79/tools/opensnoop.py

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

888-888-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部