我正在使用 echoing 程序测试 Smokeping 的 DNS 探测文档,但对我来说,当通过 Smokeping 执行命令时,这会导致分段错误。我抓住了 Smokeping 试图运行的命令systemctl status smokeping.service
,并尝试以我的普通用户和根用户身份运行它:
echoping -w 1 -p 6 -t 1 -6 -m /usr/lib/echoping/dns.so -n 20 facebook.com -t AAAA --tcp facebook.com
它退出的原因是:Segmentation fault (core dumped)
strace
输出是这里。
我的测试盒的发行版是Arch Linux 4.20内核。我也在 LTS 内核 4.19 上对此进行了测试,但也不成功。
有任何想法吗?
编辑:
Smokeping 正在尝试运行的实际命令:
echoping -w 1 -P 0xa0 -p 6 -t 1 -6 -m /usr/lib/echoping/dns.so -n 20 facebook.com -t AAAA --tcp facebook.com
(我错过了,-P 0xa0
因为我尝试在发布之前省略该标志,但应该在我最近运行的命令之前复制该命令......)
更新:
从核心转储回溯:
$ gdb /usr/bin/echoping core.27236
GNU gdb (GDB) 8.2.1
...
Reading symbols from /usr/bin/echoping...(no debugging symbols found)...done.
[New LWP 27236]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Core was generated by `echoping -w 1 -P 0xa0 -p 6 -t 1 -6 -m /usr/lib/echoping/dns.so -n 20 facebook.c'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007f73c938246a in init () from /usr/lib/echoping/dns.so
(gdb) backtrace full
#0 0x00007f73c938246a in init () from /usr/lib/echoping/dns.so
No symbol table info available.
#1 0x0000564855557d58 in main ()
No symbol table info available.
答案1
这只是 中的一个错误echoping(1)
,您应该去报告它(在检查他们是否尚未在上一个版本中修复它之后)。
在util.c
其源代码文件中,他们有这个小 cx-er:
char *
to_upper(char *input)
{
int c;
char *result;
result = (char *) malloc(strlen(input));
for (c = 0; c < strlen(input); c++)
result[c] = toupper((int)input[c]);
result[strlen(input)] = '\0';
return result;
}
请注意如何result[strlen(input)]
写入超出使用 分配的缓冲区长度的 1 个字节malloc()
。
但这还不是全部。他们没有声明正确的原型to_upper()
(在 x86-64 上返回 64 位指针),而是让编译器假设它返回 32 位 int 并强制施法它的返回值(char*)
是plugins/dns/dns.c
:
char *
init(const int argc, const char **argv)
{
...
upper_type_name = (char *) to_upper(type_name);
后者确实杀死了它,我认为这并没有曾经在 x86-64 上运行;您唯一的希望是将系统配置为多体系结构并安装echoping
为 32 位二进制文件; debian 的示例(未测试):
apt-get remove echoping
dpkg --add-architecture i386
apt-get update
apt-get install echoping:i386
apt-get source echoping
[我使用了debian 9 中的echoping-6.0.2 源代码。 ]