Skip to content

feat(symbolizer): Always symbolize kernel callstack frame modules#666

Open
rabbitstack wants to merge 4 commits intomasterfrom
always-symbolize-kernel-callstack-frame-modules
Open

feat(symbolizer): Always symbolize kernel callstack frame modules#666
rabbitstack wants to merge 4 commits intomasterfrom
always-symbolize-kernel-callstack-frame-modules

Conversation

@rabbitstack
Copy link
Copy Markdown
Owner

What is the purpose of this PR / why it is needed?

Enhance the callstack symbolizer to resolve kernel-mode addresses by leveraging loaded kernel driver information. When kernel driver metadata is available, the symbolizer maps raw kernel addresses to their corresponding module paths,
improving trace readability and diagnostic accuracy for kernel call stacks.

In this mode, the symbolizer consults the in-memory list of loaded kernel modules/drivers and uses their base addresses and image ranges to perform address-to-module resolution. This enables accurate attribution of kernel
stack frames to their originating driver binaries rather than leaving them as unresolved or raw addresses, as it was the case when the kernel address symbolization is disabled (disabled by default) because DbgHelp handler registration would consume ~50MB just to load debug information.

What type of change does this PR introduce?


Uncomment one or more /kind <> lines:

/kind feature (non-breaking change which adds functionality)

/kind bug-fix (non-breaking change which fixes an issue)

/kind refactor (non-breaking change that restructures the code, while not changing the original functionality)

/kind breaking (fix or feature that would cause existing functionality to not work as expected

/kind cleanup

/kind improvement

/kind design

/kind documentation

/kind other (change that doesn't pertain to any of the above categories)

Any specific area of the project related to this PR?


Uncomment one or more /area <> lines:

/area instrumentation

/area telemetry

/area rule-engine

/area filters

/area yara

/area event

/area captures

/area alertsenders

/area outputs

/area rules

/area filaments

/area config

/area cli

/area tests

/area ci

/area build

/area docs

/area deps

/area evasion

/area other

Special notes for the reviewer


Does this PR introduce a user-facing change?


The device path resolver is a remnant not utilized
anymore, so it is safe to remove.
The main motivation to swithcing to NtQuerySystemInformation is to determine the memory range of the loaded module.
Enhance the callstack symbolizer to resolve kernel-mode addresses by leveraging loaded kernel driver information. When kernel driver metadata is available, the symbolizer maps raw kernel addresses to their corresponding module paths,
improving trace readability and diagnostic accuracy for kernel call stacks.

In this mode, the symbolizer consults the in-memory list of loaded kernel modules/drivers and uses their base addresses and image ranges to perform address-to-module resolution. This enables accurate attribution of kernel
stack frames to their originating driver binaries rather than leaving them as unresolved or raw addresses, as it was the case when the kernel address symbolization is disabled (disabled by default) because DbgHelp handler registration would consume ~50MB just to load debug information.
@rabbitstack rabbitstack force-pushed the always-symbolize-kernel-callstack-frame-modules branch from ae2343b to 49c3874 Compare May 7, 2026 17:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant