Debugging 如何调试需要在Ubuntu上使用GDB打开低端口的应用程序

Debugging 如何调试需要在Ubuntu上使用GDB打开低端口的应用程序,debugging,gdb,port,Debugging,Gdb,Port,我有一个应用程序需要打开端口80 根据,我提供了二进制功能来打开低端端口。 我还为gdb本身提供了功能 当我运行二进制文件时,端口被成功打开,但当我使用GDB运行它时,我的错误是errno=13 重要:使用sudo运行应用程序正是我想要避免的事情 我提供了打开低端端口的二进制功能 在调试二进制文件(ptraced)时,内核会忽略其功能。这是一个合理的安全预防措施,因为ptraced二进制文件可以执行任何操作 我还为gdb本身提供了功能 这并没有改变上图 使用sudo运行应用程序正是我想要避免的事

我有一个应用程序需要打开端口
80

根据,我提供了二进制功能来打开低端端口。 我还为
gdb
本身提供了功能

当我运行二进制文件时,端口被成功打开,但当我使用GDB运行它时,我的错误是
errno=13

重要:使用
sudo
运行应用程序正是我想要避免的事情

我提供了打开低端端口的二进制功能

在调试二进制文件(ptraced)时,内核会忽略其功能。这是一个合理的安全预防措施,因为
ptrace
d二进制文件可以执行任何操作

我还为gdb本身提供了功能

这并没有改变上图

使用sudo运行应用程序正是我想要避免的事情

您不必使用
sudo
运行应用程序,只需使用GDB即可


或者,让应用程序打开8080端口并进行设置。

我想提出一种使用
authbind
调试应用程序的替代方法。 在应用程序代码中不能/不应该更改端口号的情况下,这可能会有所帮助

使用本文中的信息,我做了以下(一次性过程):

  • 如果需要,安装
    authbind
  • sudotouch
    /etc/authbind/byport/80
  • sudo chmod 500
    /etc/authbind/byport/80
  • sudo chown userid.userid
    /etc/authbind/byport/80
  • (其中“userid”读取启动用户,很可能是您自己的用户)

    从那时起,使用以下命令启动应用程序:
    authbind--deep/path/to/app

    上行:无需更改代码中的端口号。
    缺点:由于您的应用程序需要通过
    authbind
    启动,因此您可能需要将调试器附加到进程,而不是直接从您喜爱的IDE进行调试

    也不需要使用此方法设置应用程序的功能(
    setcap