我正在调试一个使用libnetfilter_queue
的程序。文档说明,用户空间队列处理应用程序需要CAP_NET_ADMIN
功能。我已经使用setcap
实用程序进行了设置:
$ sudo setcap cap_net_raw,cap_net_admin=eip ./a.out
我已验证功能正确应用,因为a)程序可以正常运行,b)getcap
返回以下输出:$ getcap ./a.out
./a.out = cap_net_admin,cap_net_raw+eip
然而,当我尝试使用命令行中的 gdb
(如 $ gdb ./a.out
) 对这个程序进行调试时,由于没有正确设置权限,它失败了。否则,gdb
的调试功能完全正常,可以像往常一样进行调试。我甚至尝试将这些能力应用于
gdb
二进制文件本身,但并没有成功。我这样做是因为(正如manpages所记录的那样),"i
"标志可能允许被调试程序从调试器继承该能力。我是否忽略了什么微不足道的东西,或者真的无法完成?
gdb
工作正常,它可以调试任何程序(包括这个)。 - Aidan Steelenfq_unbind_pf()
返回了-1
(并且errno
设置为1
),表示失败。 - Aidan Steele