SeeFlowerX
SeeFlowerX
不太可行,建议启动eadb之后,自己写个rpc进行交互
clang在编译时,如果加上`-g`选项,那么会保留用于debug相关信息,也会保留`BTF`相关的信息 - https://clang.llvm.org/docs/UsersManual.html#cmdoption-g 像[cilium/ebpf](https://github.com/cilium/ebpf)这样的项目,它在加载eBPF程序前会通过BTF的section做一些重定位(?)然后就可以不依赖内核开启`CONFIG_DEBUG_INFO_BTF` 当然,在编译的时候我们需要指定会用到的头文件,在`ecapture`中的Makefile配置: https://github.com/ehids/ecapture/blob/c0e990f45d63aed880a6ab91eb9f92551f77b76d/Makefile#L329
虽然这看起来是一个很简单的事情,但是在eBPF的限制下实现起来并不容易 主要是涉及到`用户态`与`内核态(eBPF)`之前的交互,请查阅[eBPF基本认识](https://blog.seeflower.dev/archives/176/#title-4)小节 后续会考虑在系统库已经加载完成之后的时机提供过滤支持。 个人认为使用seccomp-bpf实现syscall的追踪与详细记录是更好的选择 - https://nullptr.icu/index.php/archives/62/ 另外strace实际上有seccomp-bpf模式的支持,完全可以移植到安卓上用,配合zygisk使用
@JiaHuann 你看看这个改起来麻烦不
> > 可以打印v寄存器或者p寄存器的值吗 > > [我也简单的实现了一下,灵感来源于本项目作者](https://github.com/axhlzy/ARTHookScripts/blob/60ccb53a9fc603cccca1196464f5818a472a7d9c/agent/android/implements/10/art/ShadowFrame.ts#L293) 很棒,点赞👍🏻
请提供测试命令,复现步骤,以及具体使用的版本。 如果不是最新版,请到releases下载最新版再次测试。
无法复现,如果内核版本大于5.10,请添加`--btf`选项测试
> > 无法复现,如果内核版本大于5.10,请添加`--btf`选项测试 > > 这个就是错误处理 aarch32 syscall 导致的 还是没有搞清楚,因为`v3.0.3`以及屏蔽调了aarch32 syscall,如果目标进程是32的,都不会有输出的。 如果他用的`v3.0.2`,我找了filebrowser,测试出来也没有出现直接panic的情况,你这有能复现崩溃的样本吗 > filebrowser: ELF executable, 32-bit LSB arm, static 按照已有代码,即使数据或者参数读取出来是错误的,也不会产生崩溃,应该会处理显示为空 @enenH 如果方便的话,你可以将样本和复现步骤发到我邮箱。
复现了,我研究一下这个是什么回事
此问题已在 https://github.com/SeeFlowerX/stackplz/commit/16159c4b2824018c66577ce85554c43f46925178 修复 出现这个问题的原因是:当错误绑定调用号关系时,拿到的寄存器这些自然是些非法地址,然后把这些地址当作字符串数组处理时,没有正确处理字符串数组读取结束的界限。 另外从本issue发现了新的问题,那就是32位软件在64位系统中,调用的命令是64位的,即产生一个64位的进程。 如果是同时追踪两个架构的进程,没办法同时处理解析。。。 暂时不管这种情况了233