登录
首页 >  Golang >  Go问答

为何Golang程序不调用libc.so.6中的函数,例如socket()?

来源:stackoverflow

时间:2024-03-14 18:03:24 335浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《为何Golang程序不调用libc.so.6中的函数,例如socket()?》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

感谢您回答我的问题。我最近正在为一个项目工作。在这个项目中,我编写了一个共享库并将 ld_prelaod 设置为共享库的路径。我想通过使用这个共享库来拦截一些程序的系统调用,例如socket()、bind()、send()。它适用于 c 程序和 python 程序,但不适用于 golang 程序。后来我知道go程序是遵守静态库的。 于是我尝试了这个命令:go build -linkshared ,不幸的是,失败了。 最后,我使用命令 nm 检查应用程序中的符号。 我发现了这些:

# nm -Do  | grep socket
# results are as follows
: 
T net.socket :
D net.socektFunc :
T syscall.socket # nm -Do | grep socket : U socket

这是屏幕截图。 在此输入图像描述 再次感谢。


解决方案


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

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

今天关于《为何Golang程序不调用libc.so.6中的函数,例如socket()?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>