Почему программы, реализованные Golang, не используют функции lib c .so.6, такие как socket ()? - PullRequest
0 голосов
/ 04 августа 2020

Спасибо за ответ на мой вопрос. Я недавно работаю над проектом. В этом проекте я пишу общую библиотеку и устанавливаю LD_PRELAOD на путь к общей библиотеке. Я хочу перехватывать системные вызовы некоторых программ с помощью этой разделяемой библиотеки, например socket(), bind(), send(). Он работает для C -программ и Python -программ, но не работает для Golang -программ. Позже я узнаю, что Go -программы соответствуют библиотекам stati c. Поэтому я попробовал эту команду: 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 Ответ

2 голосов
/ 04 августа 2020

Почему программы, реализованные Go [...] не используют функции библиотеки c .so.6.

Потому что Go использует прямые системные вызовы для базовая ОС.

...