MCPcopy Create free account
hub / github.com/rabbitstack/fibratus / parse

Function parse

pkg/pe/parser.go:251–405  ·  view source on GitHub ↗
(path string, data []byte, options ...Option)

Source from the content-addressed store, hash-verified

249}
250
251func parse(path string, data []byte, options ...Option) (*PE, error) {
252 var opts opts
253 for _, opt := range options {
254 opt(&opts)
255 }
256 if opts.isImageExcluded(path) {
257 return nil, nil
258 }
259 var pe *peparser.File
260 var err error
261 if data == nil {
262 pe, err = peparser.New(path, newParserOpts(opts))
263 } else {
264 pe, err = peparser.NewBytes(data, newParserOpts(opts))
265 }
266 if err != nil {
267 return nil, err
268 }
269 defer pe.Close()
270
271 // parse the DOS header
272 err = pe.ParseDOSHeader()
273 if err != nil {
274 return nil, err
275 }
276
277 // parse the NT header
278 err = pe.ParseNTHeader()
279 if err != nil {
280 return nil, err
281 }
282
283 timestamp := pe.NtHeader.FileHeader.TimeDateStamp
284 linkTime := time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC).Add(time.Second * time.Duration(timestamp))
285 p := &PE{
286 NumberOfSections: pe.NtHeader.FileHeader.NumberOfSections,
287 LinkTime: linkTime,
288 Symbols: make([]string, 0),
289 Imports: make([]string, 0),
290 Sections: make([]Sec, 0),
291 Exports: make(map[uint32]string, 0),
292 VersionResources: make(map[string]string),
293 Is64: pe.Is64,
294 filename: path,
295 dosHeader: pe.DOSHeader,
296 ntHeader: pe.NtHeader,
297 sectionHeaders: make([]peparser.ImageSectionHeader, 0),
298 }
299
300 switch pe.Is64 {
301 case true:
302 oh64 := pe.NtHeader.OptionalHeader.(peparser.ImageOptionalHeader64)
303 p.ImageBase = format.UintToHex(oh64.ImageBase)
304 p.EntryPoint = format.UintToHex(uint64(oh64.AddressOfEntryPoint))
305 case false:
306 oh32 := pe.NtHeader.OptionalHeader.(peparser.ImageOptionalHeader32)
307 p.ImageBase = format.UintToHex(uint64(oh32.ImageBase))
308 p.EntryPoint = format.UintToHex(uint64(oh32.AddressOfEntryPoint))

Callers 2

ParseFileFunction · 0.85
ParseBytesFunction · 0.85

Calls 9

isImageExcludedMethod · 0.95
addImportMethod · 0.95
addSymbolMethod · 0.95
isDriverMethod · 0.95
UintToHexFunction · 0.92
newParserOptsFunction · 0.85
CloseMethod · 0.65
AddMethod · 0.65
StringMethod · 0.65

Tested by

no test coverage detected