stackplz icon indicating copy to clipboard operation
stackplz copied to clipboard

报错

Open enenH opened this issue 11 months ago • 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

enenH avatar Mar 04 '24 23:03 enenH

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

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

SeeFlowerX avatar Mar 05 '24 00:03 SeeFlowerX

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

enenH avatar Mar 05 '24 01:03 enenH

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

SeeFlowerX avatar Mar 05 '24 01:03 SeeFlowerX

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

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

yxsra avatar Mar 05 '24 15:03 yxsra

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

SeeFlowerX avatar Mar 06 '24 02:03 SeeFlowerX

无法复现,如果内核版本大于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 出问题了导致的。

yxsra avatar Mar 06 '24 03:03 yxsra

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

SeeFlowerX avatar Mar 06 '24 09:03 SeeFlowerX

此问题已在 https://github.com/SeeFlowerX/stackplz/commit/16159c4b2824018c66577ce85554c43f46925178 修复

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

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

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

暂时不管这种情况了233

SeeFlowerX avatar Mar 13 '24 08:03 SeeFlowerX