in pkg/tools/ssl/gotls.go [181:241]
func (r *Register) generateGOTLSSymbolOffsets(register *Register, elfFile *elf.File, v *version.Version) (*GoTLSSymbolAddress, error) {
reader, err := elfFile.NewDwarfReader(
goTLSReadSymbol, goTLSWriteSymbol, goTLSGIDStatusSymbol,
goTLSPollFDSymbol, goTLSConnSymbol, goTLSRuntimeG)
if err != nil {
return nil, err
}
symbolAddresses := &GoTLSSymbolAddress{}
readFunction := reader.GetFunction(goTLSReadSymbol)
if readFunction == nil {
log.Warnf("could not found the go tls read symbol: %s", goTLSReadSymbol)
return nil, nil
}
writeFunction := reader.GetFunction(goTLSWriteSymbol)
if writeFunction == nil {
log.Warnf("could not found the go tls write symbol: %s", goTLSWriteSymbol)
return nil, nil
}
gidStatusFunction := reader.GetFunction(goTLSGIDStatusSymbol)
if gidStatusFunction == nil {
log.Warnf("could not found the goid status change symbol: %s", goTLSGIDStatusSymbol)
return nil, nil
}
sym := register.SearchSymbol(func(a, b string) bool {
return a == b
}, "go.itab.*net.TCPConn,net.Conn", "go:itab.*net.TCPConn,net.Conn")
if sym == nil {
log.Warnf("could not found the tcp connection symbol: go.itab.*net.TCPConn,net.Conn")
return nil, nil
}
symbolAddresses.TCPConnOffset = sym.Location
var retValArg0, retValArg1 = "~r1", "~r2"
if v.Minor >= 18 {
retValArg0, retValArg1 = "~r0", "~r1"
}
// build the symbols
var assignError error
// offset
assignError = r.assignGoTLSStructureOffset(assignError, reader, goTLSPollFDSymbol, "Sysfd", &symbolAddresses.FDSysFDOffset)
assignError = r.assignGoTLSStructureOffset(assignError, reader, goTLSConnSymbol, "conn", &symbolAddresses.TLSConnOffset)
assignError = r.assignGoTLSStructureOffset(assignError, reader, goTLSRuntimeG, "goid", &symbolAddresses.GIDOffset)
assignError = r.assignGoTLSStructureOffset(assignError, reader, goTLSConnSymbol, "isClient", &symbolAddresses.IsClientOffset)
// write
assignError = r.assignGoTLSArgsLocation(assignError, writeFunction, "c", &symbolAddresses.WriteConnectionLoc)
assignError = r.assignGoTLSArgsLocation(assignError, writeFunction, "b", &symbolAddresses.WriteBufferLoc)
assignError = r.assignGoTLSArgsLocation(assignError, writeFunction, retValArg0, &symbolAddresses.WriteRet0Loc)
assignError = r.assignGoTLSArgsLocation(assignError, writeFunction, retValArg1, &symbolAddresses.WriteRet1Loc)
// read
assignError = r.assignGoTLSArgsLocation(assignError, readFunction, "c", &symbolAddresses.ReadConnectionLoc)
assignError = r.assignGoTLSArgsLocation(assignError, readFunction, "b", &symbolAddresses.ReadBufferLoc)
assignError = r.assignGoTLSArgsLocation(assignError, readFunction, retValArg0, &symbolAddresses.ReadRet0Loc)
assignError = r.assignGoTLSArgsLocation(assignError, readFunction, retValArg1, &symbolAddresses.ReadRet1Loc)
return symbolAddresses, assignError
}