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

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,节假日休息

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