func()

in pkg/tools/ssl/openssl.go [41:79]


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 := modules[libcryptoName]; libcrypto != nil {
			libcryptoPath = libcrypto.Path
		}
		if libssl := modules[libsslName]; libssl != nil {
			libsslPath = libssl.Path
		}
		if libcryptoPath == "" || libsslPath == "" {
			return false, fmt.Errorf("the OpenSSL library not complete, libcrypto: %s, libssl: %s", libcryptoPath, libsslPath)
		}

		addresses, err := r.buildOpenSSLSymAddrConfig(libcryptoPath)
		if err != nil {
			return false, err
		}

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