Skip to content

Releases: SeeFlowerX/stackplz

stackplz_v2.0.7

28 Aug 03:56
Compare
Choose a tag to compare

相关改动与更新:

  1. 更灵活的数据获取能力(详见readme),命令示例:
./stackplz --name com.sfx.ebpf -w write[int,buf:x2,int]
./stackplz --name com.sfx.ebpf -w write[int,buf:32,int]
./stackplz --name com.sfx.ebpf -w write[int,buf:0x10,int]
./stackplz --name com.sfx.ebpf -w 0xA94E8[int:x1,ptr:sp+0x30-0x2c]
./stackplz --name com.sfx.ebpf -w 0xA94E8[int:x1,buf:8:sp+0x30-0x2c]
  1. sys_exit不打印堆栈
  2. 解析一些常见的FLAG,增强可读性
  3. 部分常见int参数转换,增强可读性
  4. 支持了进程类型分组追踪、批量追踪(详见readme)
./stackplz -n app --no-uid 10084 --point open[str,int] -o tmp.log
./stackplz -n com.starbucks.cn,iso --syscall openat -o tmp.log
  1. 支持了syscall分组追踪、批量追踪(详见readme)
./stackplz -n com.xingin.xhs -s %file,%net --no-syscall openat,recvfrom
  1. 一些bug修复,优化改进

部分命令命名进行了变更,请查看帮助;使用此版本,请至少执行一次./stackplz --prepare

QRCODE

stackplz_v2.0.6

15 Aug 08:11
Compare
Choose a tag to compare
  • 改进了maps获取逻辑,现在--stack基本都可以解析到详细的堆栈
    • 有一种特殊情况无法解析堆栈,例如程序在正常退出后,内核主动调用的exit
  • 实现了--stack-size选项,可以自行指定要dump的堆栈数据大小
  • 实现了--iso选项,即支持追踪isolated进程
  • 实现了--brk选项,即支持硬件断点功能,同样可以大于调用栈;同时支持--brk-lib指定动态库
  • 实现了--kill选项,即支持在命中hook点时发送信号
  • 原有的--library选项变更为--lib
  • 其他优化改进,更新了README

相关新增功能命令示意:

./stackplz -n com.sfx.ebpf --lib libnative-lib.so -w _Z5func1v --stack --stack-size 10240
./stackplz -n com.sfx.ebpf --lib libnative-lib.so -w _Z5func1v --stack --kill SIGSTOP
./stackplz -p 9613 --brk 0x70ddfd63f0:x --stack
./stackplz -p 3102 --brk 0xf3a4:x --brk-lib libnative-lib.so --stack
./stackplz -n com.starbucks.cn --syscall execve,execveat --stack --iso
./stackplz -n com.starbucks.cn --syscall exit --kill SIGSTOP --stack

你好,不可以exit

./stackplz -n com.starbucks.cn --syscall exit --kill SIGSTOP --stack

小贴士:SIGSTOP之后可以用调试器附加到进程哟

坏消息: 在exit syscall发送SIGSTOP无法阻止原线程的退出 :(

好消息: 可以在用户态syscall调用的地方下断然后发送信号,就不怕了~~~

image

把调试器附加上去看看效果:

image

stackplz_v2.0.5

04 Aug 12:53
9f73946
Compare
Choose a tag to compare

一点小bug修复和无用代码去除,减小了产物体积

QRCODE

stackplz_v2.0.4

26 Jul 09:27
Compare
Choose a tag to compare

bug修复,syscall支持--stack选项

目前对于临时产生的子进程,--stack还无法正常工作,后续优化

stackplz_v2.0.3

25 Jul 02:02
Compare
Choose a tag to compare
  • 修复了一直被困扰的PERF_SAMPLE_RAW末尾padding导致的bug
  • 采用了新的调用方式做unwind解析,后续用户可自行选择要解析的堆栈多少
  • 【!!!】使用本版本,必须执行一次./stackplz --prepare

目前新版stackplz已经进入了相对稳定的版本,接下来是各类细节上的优化和改进 ^_^

QRCODE

stackplz_v2.0.2

24 Jul 09:39
Compare
Choose a tag to compare
  • 使用内置log,支持--quiet
  • 修复数据读取的bug

stackplz_v2.0.1

24 Jul 07:17
Compare
Choose a tag to compare
  • 指定--getoff解析lrpc偏移,废弃--getpc--getlr
  • 支持追踪fork产生的子进程了
  • 减少堆栈数据大小为8192字节
  • --syscall可简写为-s
  • --point可简写为-w

测试如下,输出在一行,放大图片看清晰点...

./stackplz -n com.starbucks.cn --syscall openat --getoff -o tmp.log --no-tnames mount,sh,getprop

image

./stackplz -n com.starbucks.cn -w __openat[int,str] --getoff -o tmp.log --no-tnames mount,sh,getprop --stack

image

stackplz_v2.0.0

23 Jul 13:14
Compare
Choose a tag to compare

虽然还没有完全完工,但是可以到发正式版的程度了。

内核版本要求:5.10+

示例命令:

  • ./stackplz -n com.starbucks.cn --point strstr[str,str] --point open[str,int] -o tmp.log
  • ./stackplz -n com.starbucks.cn --syscall connect,sendto,recvfrom -o tmp.log --dumphex
  • ./stackplz -n com.xingin.xhs --point pthread_create[int,int,int,int] -o tmp.log --stack --tnames oaid
  • ./stackplz --name io.github.vvb2060.mahoshojo --syscall all -o momo.log
  • ./stackplz --uid 2000 --syscall getcwd -o tmp.log

其他功能还有:

  • 线程号/进程号黑名单
  • 线程名黑/白名单
  • ...

具体--help看下信息

Usage:
  stackplz [flags]

Flags:
  -b, --buffer uint32       perf cache buffer size, default 8M (default 8)
  -c, --color               enable color for log file
  -d, --debug               enable debug logging
      --dumphex             dump buffer as hex
      --getlr               try get lr info
      --getpc               try get pc info
  -h, --help                help for stackplz
  -l, --library string      full lib path (default "/apex/com.android.runtime/lib64/bionic/libc.so")
  -n, --name string         must set uid or package name
      --no-pids string      pid black list, max 20
      --no-syscall string   syscall black list, max 20
      --no-tids string      tid black list, max 20
      --no-tnames string    thread name black list, max 20
  -o, --out string          save the log to file (default "stackplz_tmp.log")
  -p, --pid uint32          add pid to filter (default 1802529914)
      --point stringArray   hook point config, e.g. strstr+0x0[str,str] write[int,hex:128,int]
      --prepare             prepare libs
  -q, --quiet               wont logging to terminal when used
      --reg string          get the offset of reg
      --regs                show regs
      --stack               enable unwindstack
      --syscall string      filter syscalls
  -t, --tid uint32          add tid to filter (default 1633905520)
      --tnames string       thread name white list, max 20
  -u, --uid uint32          must set uid or package name (default 1937006947)

stackplz_v2.0.0_beta9

23 Jul 12:23
Compare
Choose a tag to compare
stackplz_v2.0.0_beta9 Pre-release
Pre-release
  • 支持了线程名黑名单,--no-tnames
  • 数据解析的多种优化
  • 支持了指针+结构体这样的参数解析,不过这需要慢慢适配
  • 支持了参数和堆栈同时工作,可配合线程名黑名单使用,后续加入线程名白名单功能

stackplz_v2.0.0_beta8

22 Jul 13:47
Compare
Choose a tag to compare
stackplz_v2.0.0_beta8 Pre-release
Pre-release

beta8发布!

  • 恢复了常规的uprobe hook,包括调用栈信息获取(暂时和获取参数冲突,稍后解决)
  • uprobe hook支持了参数输出,hex打印,并且支持了批量hook
  • 将buffer类数据最大获取长度增加到4096字节
  • dev分支的readme也更新了,请查看

./stackplz -n com.starbucks.cn --point strstr[str,str] --point open[str,int] -o tmp.log

./stackplz -n com.starbucks.cn --syscall connect,sendto,recvfrom -o tmp.log --dumphex

Snipaste_2023-07-22_21-17-17
Snipaste_2023-07-22_21-21-33

即将更新的功能:

  • 对单个进程的子进程一并加入追踪
  • 更合理的堆栈信息获取