为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Golang实现的程序不使用libc.so.6的函数,比如socket()?

为什么Golang实现的程序不使用libc.so.6的函数,比如socket()?

Go
萧十郎 2022-06-21 16:13:43
谢谢回答我的问题。我最近在为一个项目工作。在这个项目中,我编写了一个共享库并将 设置LD_PRELAOD为共享库的路径。我想通过使用这个共享库来拦截一些程序的系统调用,例如socket(), bind(), send(). 它适用于 C 程序和 Python 程序,但不适用于 Golang 程序。后来我知道 Go 程序符合静态库。所以我尝试了这个命令:go build -linkshared <test-name>,不幸的是,它失败了。最后,我使用命令nm检查应用程序中的符号。我发现了这些:# nm -Do <go-program-name> | grep socket# results are as follows<go-program-name>: <address> T net.socket<go-program-name>: <address> D net.socektFunc<go-program-name>: <address> T syscall.socket# nm -Do <C-program-name> | grep socket<C-program>: U socket这是屏幕截图。 在此处输入图像描述 再次感谢。
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

为什么 Go[...] 实现的程序不使用 libc.so.6 的功能。

因为 Go 使用对底层操作系统的直接系统调用。


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信