func()

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
	})
}