in pkg/tools/ssl/openssl.go [41:83]
func (r *Register) OpenSSL(symbolAddrMap *ebpf.Map, sslWrite, sslWriteRet, sslRead, sslReadRet *ebpf.Program) {
r.addHandler("OpenSSL", func() (bool, error) {
var libcryptoName, libsslName = "libcrypto.so", "libssl.so"
var libcryptoPath, libsslPath string
modules, err := r.findModules(libcryptoName, libsslName)
if err != nil {
return false, err
}
if len(modules) == 0 {
return false, nil
}
if libcrypto, exist := modules[libcryptoName]; exist && libcrypto != nil {
libcryptoPath = libcrypto.Path
}
if libssl, exist := modules[libsslName]; exist && libssl != nil {
libsslPath = libssl.Path
}
if len(modules) != 2 {
log.Warnf("the OpenSSL library not complete, libcrypto: %s, libssl: %s", libcryptoPath, libsslPath)
return false, nil
}
addresses, err := r.buildOpenSSLSymAddrConfig(libcryptoPath)
if err != nil {
return false, err
}
if addresses == nil {
return false, fmt.Errorf("could not found the symbol address config")
}
if err := symbolAddrMap.Put(uint32(r.pid), addresses); err != nil {
return false, err
}
libSSLLinker := r.linker.OpenUProbeExeFile(libsslPath)
libSSLLinker.AddLink("SSL_write", sslWrite, sslWriteRet)
libSSLLinker.AddLink("SSL_read", sslRead, sslReadRet)
if err := r.linker.HasError(); err != nil {
return false, err
}
return true, nil
})
}