mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 16:33:21 +01:00
Native Image SBOM: support extracting symbols in .dynsym section for ELF files (#3647)
Signed-off-by: Joel Rudsberg <joel.rudsberg@oracle.com>
This commit is contained in:
parent
36c198ac67
commit
974ce23722
@ -251,11 +251,11 @@ func (ni nativeImageElf) fetchPkgs() (pkgs []pkg.Package, relationships []artifa
|
||||
var sbomLength elf.Symbol
|
||||
var svmVersion elf.Symbol
|
||||
|
||||
si, err := bi.Symbols()
|
||||
si, err := ni.getSymbols()
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("no symbols found in binary: %w", err)
|
||||
return nil, nil, err
|
||||
}
|
||||
if si == nil {
|
||||
if len(si) == 0 {
|
||||
return nil, nil, errors.New(nativeImageMissingSymbolsError)
|
||||
}
|
||||
for _, s := range si {
|
||||
@ -286,6 +286,31 @@ func (ni nativeImageElf) fetchPkgs() (pkgs []pkg.Package, relationships []artifa
|
||||
return decompressSbom(data, sbomLocation, lengthLocation)
|
||||
}
|
||||
|
||||
// getSymbols obtains the union of the symbols in the .symtab and .dynsym sections of the ELF file
|
||||
func (ni nativeImageElf) getSymbols() ([]elf.Symbol, error) {
|
||||
var symbols []elf.Symbol
|
||||
symsErr := error(nil)
|
||||
dynErr := error(nil)
|
||||
|
||||
if syms, err := ni.file.Symbols(); err == nil {
|
||||
symbols = append(symbols, syms...)
|
||||
} else {
|
||||
symsErr = err
|
||||
}
|
||||
|
||||
if dynSyms, err := ni.file.DynamicSymbols(); err == nil {
|
||||
symbols = append(symbols, dynSyms...)
|
||||
} else {
|
||||
dynErr = err
|
||||
}
|
||||
|
||||
if symsErr != nil && dynErr != nil {
|
||||
return nil, fmt.Errorf("could not retrieve symbols from binary: SHT_SYMTAB error: %v, SHT_DYNSYM error: %v", symsErr, dynErr)
|
||||
}
|
||||
|
||||
return symbols, nil
|
||||
}
|
||||
|
||||
// fetchPkgs obtains the packages from a Native Image given as a Mach O file.
|
||||
func (ni nativeImageMachO) fetchPkgs() (pkgs []pkg.Package, relationships []artifact.Relationship, retErr error) {
|
||||
defer func() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user