Список имен DLL, связанных в произвольном PE ( EXE) файле

#windows #go #portable-executable

#Windows #Вперед #portable-исполняемый файл

Вопрос:

Я наткнулся на задачу прочитать список DLL-файлов, связанных с произвольным PE-исполняемым файлом в Windows. Хотя debug/pe это выглядело многообещающе, но было сложно обнаружить:

 // ImportedLibraries returns the names of all libraries
// referred to by the binary f that are expected to be
// linked with the binary at dynamic link time.
func (f *File) ImportedLibraries() ([]string, error) {
    // TODO
    // cgo -dynimport don't use this for windows PE, so just return.
    return nil, nil
}
  

Итак, есть ли что-нибудь, что я могу использовать для извлечения списка DLL из EXE-файла?

Комментарии:

1. Если вы не возражаете против использования стороннего приложения, dumpbin может это сделать. Эта библиотека тоже может работать — github.com/Velocidex/go-pe/blob/master/imports.go

Ответ №1:

Кажется, это делает это:

 package main
import "github.com/Binject/debug/pe"

func main() {
   f, e := pe.Open(`C:Windowsnotepad.exe`)
   if e != nil {
      panic(e)
   }
   defer f.Close()
   a, e := f.ImportedLibraries()
   if e != nil {
      panic(e)
   }
   for _, s := range a {
      println(s)
   }
}
  

https://pkg.go.dev/github.com/Binject/debug/pe