unwinddaemon

编译步骤

  • 同步AOSP
  • 在AOSP源码文件夹下创建system/extras/unwinddaemon文件夹
  • 将本项目的Android.bpmain.cpp放入上一步创建的文件夹
  • 在AOSP源码文件夹下打开终端,执行下面的命令进行编译
    . build/envsetup.sh
    lunch aosp_arm64-eng
    mmma system/extras/unwinddaemon
  • 编译成功后,产物在out/target/product/generic_arm64/system/bin/unwinddaemon

使用

out/target/product/generic_arm64/system/bin/unwinddaemon推送到手机的/data/local/tmp,授予可执行权限

然后执行/data/local/tmp/unwinddaemon即可

hook_open_with_stack.py是配合bcc修改使用的demo

bin/unwinddaemon是预编译好的,但不一定兼容

bcc修改参见

原理,代码修改等,请查阅eBPF on Android之实现基于dwarf的用户态栈回溯

效果示意图


共享库版本

编译lib.cpp得到的产物如下,在SeeFlowerX/stackplz中使用

ld-android.so
libbase.so
libc++.so
libdl.so
liblog.so
liblzma.so
libm.so
libstackplz.so
libunwindstack.so