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

Method ProcessEvent

pkg/symbolize/symbolizer.go:197–253  ·  view source on GitHub ↗
(e *event.Event)

Source from the content-addressed store, hash-verified

195}
196
197func (s *Symbolizer) ProcessEvent(e *event.Event) (bool, error) {
198 if e.IsTerminateProcess() {
199 // release symbol handler and process handle
200 pid := e.Params.MustGetPid()
201 s.mu.Lock()
202 defer s.mu.Unlock()
203 delete(s.mods, pid)
204 delete(s.symbols, pid)
205 // remove exports for this process
206 s.exps.RemoveExports(e.GetParamAsString(params.Exe))
207 symCachedSymbols.Add(-int64(len(s.symbols[pid])))
208 proc, ok := s.procs[pid]
209 if !ok {
210 return true, nil
211 }
212 s.r.Cleanup(proc.handle)
213 _ = windows.CloseHandle(proc.handle)
214 delete(s.procs, pid)
215 return true, nil
216 }
217
218 if e.IsLoadModule() || e.IsUnloadModule() {
219 filename := e.GetParamAsString(params.ModulePath)
220 addr := e.Params.TryGetAddress(params.ModuleBase)
221 // if the kernel driver is loaded or unloaded,
222 // load/unload symbol handlers respectively
223 if (strings.ToLower(filepath.Ext(filename)) == ".sys" ||
224 e.Params.TryGetBool(params.FileIsDriver)) && s.config.SymbolizeKernelAddresses {
225 if e.IsLoadModule() {
226 err := s.r.LoadModule(windows.CurrentProcess(), filename, addr)
227 if err != nil {
228 log.Errorf("unable to load symbol table for %s module: %v", filename, err)
229 }
230 } else {
231 s.r.UnloadModule(windows.CurrentProcess(), addr)
232 }
233 }
234
235 // remove module if it has been unmapped from the process VAS
236 err := s.syncModules(e)
237 if err != nil {
238 log.Error(err)
239 }
240 }
241
242 if !e.Params.Contains(params.Callstack) {
243 return true, nil
244 }
245 defer e.Params.Remove(params.Callstack)
246
247 err := s.processCallstack(e)
248 if err != nil {
249 callstackProcessErrors.Add(1)
250 }
251
252 return true, nil
253}
254

Callers 4

TestProcessCallstackFunction · 0.95

Calls 15

syncModulesMethod · 0.95
processCallstackMethod · 0.95
IsTerminateProcessMethod · 0.80
MustGetPidMethod · 0.80
LockMethod · 0.80
UnlockMethod · 0.80
RemoveExportsMethod · 0.80
GetParamAsStringMethod · 0.80
IsLoadModuleMethod · 0.80
IsUnloadModuleMethod · 0.80
TryGetAddressMethod · 0.80
TryGetBoolMethod · 0.80

Tested by 4

TestProcessCallstackFunction · 0.76