gpt4 book ai didi

linux - 为什么Golang实现的程序不使用libc.so.6的功能,例如socket()?

转载 作者:行者123 更新时间:2023-12-01 22:39:17 25 4
gpt4 key购买 nike

谢谢回答我的问题。我最近正在为一个项目工作。在这个项目中,我编写了一个共享库,并将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
这是屏幕截图。
enter image description here
再次感谢。

最佳答案

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

因为Go使用对底层OS的直接syscall。

关于linux - 为什么Golang实现的程序不使用libc.so.6的功能,例如socket()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63239693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com