我正在调试一个使用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
二进制文件本身,但无济于事。我这样做了(正如手册页所记录的那样,“ i
”标志可能允许被调试者从调试器继承能力。
是否有一些琐碎的事情我错过了,或者这真的不能完成吗?