Спасибо за ответ на мой вопрос. Я недавно работаю над проектом. В этом проекте я пишу общую библиотеку и устанавливаю 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
А это скриншот. введите описание изображения здесь Еще раз спасибо.