Android上的ebpf已經(jīng)成為現(xiàn)實
-
維術(shù)大佬修改的debian方案挺好,可以直接在android跑bcc、bpftrace等基于ebpf封裝的工具
-
臉哥實踐出真知下的go + c 混合開發(fā)ebpf程序的方案挺好,開發(fā)環(huán)境簡單了,運(yùn)行也不再需要debian環(huán)境依賴了,調(diào)用棧也有了unix domaian socket和load so的方案,屬實方便了許多
-
stackplz 和 estrace 屬實挺好,學(xué)到很多,臉哥和各位大佬牛逼
-
-
android上的ebpf實踐感覺大多還是基于syscall監(jiān)測的需求
-
之前看了一些bpftrace的文章感覺用它來開發(fā)類似syscall的需求應(yīng)該是更快的
設(shè)備環(huán)境:
推薦鈔能力解決,直接上高內(nèi)核版本
設(shè)備:小米12
內(nèi)核:5.10.101-android12-9-00005-ga829d48e78bd-ab9206161(原版未改)
開發(fā)環(huán)境:
eadbdebian+vscoderemote
當(dāng)Xiaomi12遇到 eBPF:https://mp.weixin.qq.com/s/h_ixxr1WZ8VqYt-zMrwSDA
eBPF on Android之bcc環(huán)境準(zhǔn)備——eadb簡版:https://blog.seeflower.dev/archives/138/
60秒學(xué)會用eBPF-BCC hook系統(tǒng)調(diào)用 ( 2 ) hook安卓所有syscall:https://bbs.kanxue.com/thread-275176.htm
文章看下來并實踐的話,你應(yīng)該已經(jīng)vscode可以遠(yuǎn)程開發(fā)和跑bcc腳本了
Android Debian bpftrace環(huán)境初始化
進(jìn)入debian環(huán)境:/data/eadb/run/data/eadb/debian
vi /etc/apt/sources.list
deb http://ftp.cn.debian.org/debian sid main
apt-get update
apt-get install bpftrace
bpftrace -V
bpftrace v0.17.0
比著estrace上代碼
#!/usr/bin/env bpftrace
struct timespec {
long tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
BEGIN
{
printf("Tracing all system calls... Hit Ctrl-C to end.
");
}
tracepointsys_enter
/uid == $1/
{
if (args->id == 221){ // int execve(const char *pathname, char *const argv[], char *const envp[]);
printf("comm: %s, nr: %d, ", comm, args->id);
printf("execve: path=%s, argv=", str(uptr(args->args[0])));
join(uptr(args->args[1]));
}else if (args->id == 281){ // int execveat(int dirfd, const char *pathname, char *const argv[], char *const envp[], int flags);
printf("comm: %s, nr: %d, ", comm, args->id);
printf("execveat: path=%s, argv=", str(uptr(args->args[1])));
join(uptr(args->args[2]));
}else if (args->id == 101){ // int nanosleep(const struct timespec *req, struct timespec *rem);
printf("comm: %s, nr: %d, ", comm, args->id);
$wait_time = (struct timespec *)uptr(args->args[0]);
printf("nanosleep: tv_sec=%ld, tv_nsec=%ld
", $wait_time->tv_sec, $wait_time->tv_nsec);
}else if (args->id == 56){ // int openat(int dirfd, const char *pathname, int flags, mode_t mode);
//printf("comm: %s, nr: %d, ", comm, args->id);
//printf("openat: path=%s
", str(uptr(args->args[1])));
@mem["openat", str(uptr(args->args[1]))] = count();
}else if (args->id == 78){ // ssize_t readlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz);
//printf("comm: %s, nr: %d, ", comm, args->id);
//printf("readlinkat: path=%s
", str(uptr(args->args[1])));
@mem["readlinkat", str(uptr(args->args[1]))] = count();
}
return;
}
代碼說明
-
就搞了一些系統(tǒng)調(diào)用號,主要是實踐bpftrace的能力,調(diào)用號數(shù)量不是問題,加就行了,體力活
-
gpt查下函數(shù)原型,比著解析參數(shù)就是了
-
對了,我現(xiàn)在不賣了gpt賬號了,買別人的吧
-
https://www.fakabang.com/details/F5DC5860
-
-
bpftrace的命令行參數(shù)解析,比較方便
-
主要是監(jiān)測點(diǎn)的參數(shù)解析,不論是單個char *還是char *[],解析和輸出都非常方便
-
結(jié)構(gòu)體也是支持的
-
bpf map用起來也是十分的方便,還可以數(shù)據(jù)統(tǒng)計
-
-
總之就是十分的方便
-
-
也可以ustack拿到用戶空間的調(diào)用棧,但好像解析有問題,不能直接顯示出具體的文件和偏移,不過感覺問題不大,自己去maps對照下映射文件和偏移也行
-
修改參數(shù)好像有點(diǎn)問題,沒找到api,只看到了override
-
-
單論syscall監(jiān)測場景感覺足夠了,方便快捷是其他方案無法比擬的
-
-
就這樣吧
簡單跑下代碼看看,拿estrace的第一個例子試試
bpftrace開跑:
bpf map用來統(tǒng)計:
bpftrace的開發(fā)文檔
https://github.com/iovisor/bpftrace/blob/master/docs/reference_guide.md
簡單實踐over
審核編輯 :李倩
-
Android
+關(guān)注
關(guān)注
12文章
3945瀏覽量
127974 -
封裝
+關(guān)注
關(guān)注
127文章
7999瀏覽量
143429 -
參數(shù)
+關(guān)注
關(guān)注
11文章
1860瀏覽量
32438
原文標(biāo)題:Android平臺bpftrace實踐
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
基于ebpf的性能工具-bpftrace腳本語法
![基于ebpf的性能工具-<b class='flag-5'>bpftrace</b>腳本語法](https://file1.elecfans.com/web2/M00/A2/F7/wKgaomT1oPuAU2i9AAApcNw05wk162.png)
4412開發(fā)板Android教程——Android平臺簡介
基于android平臺的耳機(jī)驅(qū)動
初級小白實戰(zhàn)資料,零基礎(chǔ)入門rk3399平臺下linux4.4+android8.1開發(fā)
Android內(nèi)核編譯教程
Android平臺發(fā)展暗埋隱患
Android應(yīng)用原型實踐分析
![<b class='flag-5'>Android</b>應(yīng)用原型<b class='flag-5'>實踐</b>分析](https://file.elecfans.com/web2/M00/49/FD/pYYBAGKhvISACWjbAAAp8D65GGQ532.png)
Android平臺發(fā)展暗埋隱患
Microchip Android系統(tǒng)配件開發(fā)平臺
強(qiáng)勁的Linux Trace工具 bpftrace for Linux 2018
![強(qiáng)勁的Linux Trace工具 <b class='flag-5'>bpftrace</b> for Linux 2018](https://file.elecfans.com/web1/M00/94/FD/o4YBAFz2IeWABmQmAAAZPRcXZfY271.png)
將Android操作系統(tǒng)移植到嵌入式平臺的最佳實踐
基于ebpf的性能工具-bpftrace
![基于ebpf的性能工具-<b class='flag-5'>bpftrace</b>](https://file1.elecfans.com/web2/M00/A1/8B/wKgZomT1mGWAKQhcAAA6OBECSrA567.png)
評論