| 195 | } |
| 196 | |
| 197 | func (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 | |