SeeFlowerX / unwindbcc

Apache License 2.0
11 stars 6 forks source link

Failed to attach BPF to uprobe #1

Closed Qiaijueqing closed 1 year ago

Qiaijueqing commented 1 year ago

你好,我拉取了你的代码并编译运行但是我得到了如下错误 : cannot attach uprobe, Invalid argument Traceback (most recent call last): File "/unwindbcc/tools/hook_open_with_stack.py", line 150, in <module> main() File "/unwindbcc/tools/hook_open_with_stack.py", line 145, in main bpf_hooker.hook() File "/unwindbcc/tools/hook_open_with_stack.py", line 121, in hook self.bpf_module.attach_uprobe(name=self.library, sym='open', fn_name='probe_hook_open_enter', pid=self.pid) File "/usr/lib/python3/dist-packages/bcc/__init__.py", line 1369, in attach_uprobe raise Exception("Failed to attach BPF to uprobe") Exception: Failed to attach BPF to uprobe 我定位到的问题是: [19915.660150] trace_uprobe: error: Event name is too long Command: p:uprobes/p__apex_com_android_runtime_lib64_bionic_libc_so_0x61ac0_bcc_13356 /apex/com.android.runtime/lib64/bionic/libc.so:0x61ac0 你是如何处理此故障的?这该如何解决?

SeeFlowerX commented 1 year ago
Qiaijueqing commented 1 year ago

手机内核6.0.0-kernel 这里有个相同的问题: https://github.com/iovisor/bcc/issues/3835 https://github.com/iovisor/bcc/issues/3730

SeeFlowerX commented 1 year ago
SeeFlowerX commented 1 year ago

你先测试下bcc官方的demo能不能用

另外看下下面两个命令的输出

zcat /proc/config.gz | grep PROBE
cat /proc/kallsyms | grep probe_read
Qiaijueqing commented 1 year ago

手机是pixel4 内核为移植内核 官方bcc可用测试过

zcat /proc/config.gz | grep PROBE 如下:

CONFIG_GENERIC_IRQ_PROBE=y CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_KPROBES=y CONFIG_UPROBES=y CONFIG_KRETPROBES=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y CONFIG_MODPROBE_PATH="/sbin/modprobe" CONFIG_TEST_ASYNC_DRIVER_PROBE is not set CONFIG_GENERIC_CPU_AUTOPROBE=y CONFIG_TIMER_PROBE=y CONFIG_KPROBE_EVENTS=y CONFIG_KPROBE_EVENTS_ON_NOTRACE is not set CONFIG_UPROBE_EVENTS=y CONFIG_PROBE_EVENTS=y CONFIG_BPF_KPROBE_OVERRIDE is not set CONFIG_KPROBE_EVENT_GEN_TEST is not set

cat /proc/kallsyms | grep probe_read 如下:

ffffffc008262210 T bpf_probe_read_user ffffffc008262278 T bpf_probe_read_user_str ffffffc0082622e0 T bpf_probe_read_kernel ffffffc008262348 T bpf_probe_read_kernel_str ffffffc008263738 T bpf_probe_read_compat_str ffffffc008263868 T bpf_probe_read_compat ffffffc009558cf8 r bpf_probe_read_compat_proto ffffffc009558f98 R bpf_probe_read_user_proto ffffffc009558ff8 R bpf_probe_read_user_str_proto ffffffc009559058 R bpf_probe_read_kernel_proto ffffffc0095590b8 R bpf_probe_read_kernel_str_proto ffffffc0095593b8 r bpf_probe_read_compat_str_proto

Qiaijueqing commented 1 year ago

bcc编译环境是一样的 官方的bcc使用过脚本 但是脚本内部的是否使用了相同的函数我并不知道, 或者官方那个文件拥有相同的函数可以测试? 官方bcc他们遇到的问题都是内核有设置函数明不得超过64 bcc而是256 并不相符

SeeFlowerX commented 1 year ago

你可以测试一下tiann这个版本,然后hook_open_with_stack.py里面把unwind_call_stack=1这部分去掉,看看能不能正常使用

不过我很好奇是怎么给Pixel 4移植6.0的内核的

Qiaijueqing commented 1 year ago

好的我去测试一下 手机需要硬件修改 ,主板焊接强制刷入 刷入后只能运行内核不能有其他的外设支持

SeeFlowerX commented 1 year ago

也可能和tiann对bcc改动有关,你可以这样测试

Qiaijueqing commented 1 year ago

确实是此版本被修改过的原因造成高版本不兼容,我遵从了你最后的建议修改成功。 此版本应该可以改进为监控自定义库函数得方案吧,我暂时有这个想法,不知是否可行

SeeFlowerX commented 1 year ago

当然是可以的,基于bcc改起来还是挺灵活的,做测试还是可以。

个人更推荐像ecapture这样做成直接编译成单一的可执行文件,同时把unwinddaemon整合,无需单独起一个进程。

最近也在摸索学习go这个编写和编译...

不过还需要提下两个问题

SeeFlowerX commented 1 year ago

好消息,重新整合发布了一个适合4.14+手机使用的单独二进制文件~~

https://github.com/SeeFlowerX/stackplz