SeeFlowerX/stackplz

报错

Closed this issue · 8 comments

panic: unexpected EOF

goroutine 13 [running]:
stackplz/user/argtype.parse_STRING_ARRAY({0x77a6caca68?, 0x20?}, 0x4000316d08?, 0x598df06478?, 0x0?)
/home/runner/work/stackplz/stackplz/user/argtype/argtype_complex.go:91 +0x3a0
stackplz/user/argtype.(*ARG_STRUCT).Parse(0x598e02a2e0?, 0x40000aab10?, 0x590000003a?, 0x70?)
/home/runner/work/stackplz/stackplz/user/argtype/argtype_base.go:631 +0x70
stackplz/user/config.(*PointArg).Parse(0x598e097940?, 0x4001cec9f0?, 0x598e09bb00?, 0x8e47c238?)
/home/runner/work/stackplz/stackplz/user/config/config_point_arg.go:116 +0x88
stackplz/user/config.(*SyscallPoint).ParseEnterPoint(0x40010136c0?, 0x598e005c00?)
/home/runner/work/stackplz/stackplz/user/config/config_syscall.go:55 +0xd8
stackplz/user/event.(*SyscallEvent).ParseContext(0x40010136c0)
/home/runner/work/stackplz/stackplz/user/event/event_raw_syscalls.go:56 +0x260
stackplz/user/event.(*SyscallEvent).ParseEvent(0x40010136c0)
/home/runner/work/stackplz/stackplz/user/event/event_raw_syscalls.go:31 +0x4c
stackplz/user/event_processor.(*EventProcessor).dispatch(0x40002ee920, {0x598e09c130, 0x40010136c0})
/home/runner/work/stackplz/stackplz/user/event_processor/processer.go:55 +0x48
stackplz/user/event_processor.(*EventProcessor).Serve(0x40002ee920)
/home/runner/work/stackplz/stackplz/user/event_processor/processer.go:41 +0x44
stackplz/user/module.(*Module).Run.func2()
/home/runner/work/stackplz/stackplz/user/module/imodule.go:128 +0x28
created by stackplz/user/module.(*Module).Run
/home/runner/work/stackplz/stackplz/user/module/imodule.go:127 +0xc0

请提供测试命令,复现步骤,以及具体使用的版本。

如果不是最新版,请到releases下载最新版再次测试。

./stackplz -p 30538 -s all
我在监听一个sh,不知道他干了啥导致的崩溃
就是你最新发的release

无法复现,如果内核版本大于5.10,请添加--btf选项测试

无法复现,如果内核版本大于5.10,请添加--btf选项测试

这个就是错误处理 aarch32 syscall 导致的

无法复现,如果内核版本大于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 如果方便的话,你可以将样本和复现步骤发到我邮箱。

无法复现,如果内核版本大于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 如果方便的话,你可以将样本和复现步骤发到我邮箱。

用 v3.0.2 , stackplz --uid .... -s all ... ,指定一个 32 位 的 app ,大概率可以复现,它应该是解析某个 syscall 出问题了导致的。

复现了,我研究一下这个是什么回事

此问题已在 16159c4 修复

出现这个问题的原因是:当错误绑定调用号关系时,拿到的寄存器这些自然是些非法地址,然后把这些地址当作字符串数组处理时,没有正确处理字符串数组读取结束的界限。

另外从本issue发现了新的问题,那就是32位软件在64位系统中,调用的命令是64位的,即产生一个64位的进程。

如果是同时追踪两个架构的进程,没办法同时处理解析。。。

暂时不管这种情况了233