Say, if I have a virtual address (or its physical address), is there a way to tell what device that address is mapped to?
With difficulty. Once you have a physical address, you can run through the list of PCIe devices and try to match it up. Windbg has commands to query the PCI bus.
Most virtual addresses map to memory, of course.
It's not just PCIe devices though, is it?
In the typical modern PC, it's virtually always going to be a PCIe device. If you're working in the embedded world, then it's the wild wild west.
What Tim said... and modulo legacy-type stuff on the LPC bus.
!arbiter 2 shows which memory ranges are assigned to each device:
Thanks. I'm getting a bunch of errors if I run !arbiter 2
:
Could not read arbiter entry {addr} from devnode {addr}
Which version of the OS and debugger? What errors?
1: kd> vertarget
Windows 10 Kernel Version 22621 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Edition build lab: 22621.1.amd64fre.ni_release.220506-1250
Kernel base = 0xfffff805`0e600000 PsLoadedModuleList = 0xfffff805`0f213130
Debug session time: Wed Jul 24 15:56:14.551 2024 (UTC - 4:00)
System Uptime: 0 days 3:53:07.246
1: kd> !arbiter 2
DEVNODE ffffa40bfcf2dab0 (HTREE\ROOT\0)
Memory Arbiter "RootMemory" at fffff8050f25c240
Allocated ranges:
0000000000000000 - 0000000000000fff 00000000 <Not on bus>
00000000000a0000 - 00000000000bffff S ffffa40bfe0e3d90 (pci)
00000000000c4000 - 00000000000c7fff S ffffa40bfe0e3d90 (pci)
00000000000c8000 - 00000000000cbfff S ffffa40bfe0e3d90 (pci)
00000000000d4000 - 00000000000d7fff S ffffa40bfe0e3d90 (pci)
00000000000d8000 - 00000000000dbfff S ffffa40bfe0e3d90 (pci)
00000000000e4000 - 00000000000e7fff S ffffa40bfe0e3d90 (pci)
00000000000e8000 - 00000000000ebfff S ffffa40bfe0e3d90 (pci)
00000000000ec000 - 00000000000effff S ffffa40bfe0e3d90 (pci)
00000000c0000000 - 00000000efffffff
00000000c0000000 - 00000000efffffff SC ffffa40bfe0e3d90 (pci)
00000000e0000000 - 00000000e7ffffff CB 00000000 <Not on bus>
00000000f0000000 - 00000000fa1fffff S ffffa40bfe0e3d90 (pci)
00000000fa200000 - 00000000febfffff S ffffa40bfe0e3d90 (pci)
00000000fec00000 - 00000000fec003ff B ffffa40bfcf4fdc0
00000000fec10000 - 00000000fed3ffff
00000000fec10000 - 00000000fed3ffff SC ffffa40bfe0e3d90 (pci)
00000000fed00000 - 00000000fed003ff CB ffffa40bfcf4fdc0
00000000fed40000 - 00000000fed44fff ffffa40bfdbe2d90 (TPM)
00000000fed45000 - 00000000fedfffff S ffffa40bfe0e3d90 (pci)
00000000fee00000 - 00000000fee003ff B ffffa40bfcf4fdc0
00000000fef00000 - 00000000ffdfffff S ffffa40bfe0e3d90 (pci)
0000200000000000 - ffffffffffffffff 00000000 <Not on bus>
Possible allocation:
< none >
DEVNODE ffffa40bfce73730 (ACPI\PNP0A03\2&daba3ff&0)
Memory Arbiter "PCI Memory (b=0)" at ffffa40bfd5f0190
Allocated ranges:
0000000000000000 - 000000000009ffff 00000000 <Not on bus>
00000000000a0000 - 00000000000bffff S ffffa40bff3d7360 (vm3dmp_loader)
00000000000c0000 - 00000000000c3fff 00000000 <Not on bus>
00000000000cc000 - 00000000000d3fff 00000000 <Not on bus>
00000000000dc000 - 00000000000e3fff 00000000 <Not on bus>
00000000000f0000 - 00000000bfffffff 00000000 <Not on bus>
00000000e0000000 - 00000000e7ffffff
00000000e0000000 - 00000000e7ffffff CB 00000000 <Not on bus>
00000000e0000000 - 00000000e7ffffff CB ffffa40bfe6eed70
00000000f0000000 - 00000000f7ffffff ffffa40bff3d7360 (vm3dmp_loader)
00000000f8000000 - 00000000f84fffff ffffa40bfe4f0360 (pci)
00000000f8500000 - 00000000f85fffff ffffa40bfe7ca060 (pci)
00000000f8600000 - 00000000f86fffff ffffa40bff3f3060 (pci)
00000000f8700000 - 00000000f87fffff ffffa40bfe2f3060 (pci)
00000000f8800000 - 00000000f88fffff ffffa40bfe4f3060 (pci)
00000000f8900000 - 00000000f89fffff ffffa40bfefed060 (pci)
00000000f8a00000 - 00000000f8afffff ffffa40bff3eb060 (pci)
00000000f8b00000 - 00000000f8bfffff ffffa40bff3d8060 (pci)
00000000f8c00000 - 00000000f8cfffff ffffa40bfe3c5060 (pci)
00000000f8d00000 - 00000000f8dfffff ffffa40bfe2ea060 (pci)
00000000f8e00000 - 00000000f8efffff ffffa40bfefd0060 (pci)
00000000f8f00000 - 00000000f8ffffff ffffa40bfefce060 (pci)
00000000f9000000 - 00000000f90fffff ffffa40bfefcc060 (pci)
00000000f9100000 - 00000000f91fffff ffffa40bfe7c9360 (pci)
00000000f9200000 - 00000000f92fffff ffffa40bfe9cf360 (pci)
00000000f9300000 - 00000000f93fffff ffffa40bfe9cb360 (pci)
00000000f9400000 - 00000000f94fffff ffffa40bfe3ce360 (pci)
00000000f9500000 - 00000000f95fffff ffffa40bfe3ca360 (pci)
00000000f9600000 - 00000000f96fffff ffffa40bfefec360 (pci)
00000000f9700000 - 00000000f97fffff ffffa40bfefe8360 (pci)
00000000f9800000 - 00000000f98fffff ffffa40bfe4ec360 (pci)
00000000f9900000 - 00000000f99fffff ffffa40bfe4e8360 (pci)
00000000f9a00000 - 00000000f9afffff ffffa40bfe5db360 (pci)
00000000f9b00000 - 00000000f9bfffff ffffa40bff3e1360 (pci)
00000000f9c00000 - 00000000f9cfffff ffffa40bff3dd360 (pci)
00000000f9d00000 - 00000000f9dfffff ffffa40bff3f2360 (pci)
00000000f9e00000 - 00000000f9efffff ffffa40bff3ee360 (pci)
00000000f9f00000 - 00000000f9ffffff ffffa40bff3e8360 (pci)
00000000fa000000 - 00000000fa0fffff ffffa40bfe2f2360 (pci)
00000000fa100000 - 00000000fa1fffff ffffa40bfeff2360 (pci)
00000000fb800000 - 00000000fbffffff ffffa40bff3d7360 (vm3dmp_loader)
00000000fc000000 - 00000000fc9fffff ffffa40bfe4f0360 (pci)
00000000fcb00000 - 00000000fcbfffff ffffa40bfe7ca060 (pci)
00000000fcc00000 - 00000000fccfffff ffffa40bff3f3060 (pci)
00000000fcd00000 - 00000000fcdfffff ffffa40bfe2f3060 (pci)
00000000fce00000 - 00000000fcefffff ffffa40bfe4f3060 (pci)
00000000fcf00000 - 00000000fcffffff ffffa40bfefed060 (pci)
00000000fd000000 - 00000000fd0fffff ffffa40bff3eb060 (pci)
00000000fd100000 - 00000000fd1fffff ffffa40bff3d8060 (pci)
00000000fd200000 - 00000000fd2fffff ffffa40bfe3c5060 (pci)
00000000fd300000 - 00000000fd3fffff ffffa40bfe2ea060 (pci)
00000000fd400000 - 00000000fd4fffff ffffa40bfefd0060 (pci)
00000000fd500000 - 00000000fd5fffff ffffa40bfefce060 (pci)
00000000fd600000 - 00000000fd6fffff ffffa40bfefcc060 (pci)
00000000fd700000 - 00000000fd7fffff ffffa40bfe7c9360 (pci)
00000000fd800000 - 00000000fd8fffff ffffa40bfe9cf360 (pci)
00000000fd900000 - 00000000fd9fffff ffffa40bfe9cb360 (pci)
00000000fda00000 - 00000000fdafffff ffffa40bfe9c7360 (pci)
00000000fdb00000 - 00000000fdbfffff ffffa40bfe3ce360 (pci)
00000000fdc00000 - 00000000fdcfffff ffffa40bfe3ca360 (pci)
00000000fdd00000 - 00000000fddfffff ffffa40bfefec360 (pci)
00000000fde00000 - 00000000fdefffff ffffa40bfefe8360 (pci)
00000000fdf00000 - 00000000fdffffff ffffa40bfe4ec360 (pci)
00000000fe000000 - 00000000fe0fffff ffffa40bfe4e8360 (pci)
00000000fe100000 - 00000000fe1fffff ffffa40bfe5db360 (pci)
00000000fe200000 - 00000000fe2fffff ffffa40bfe5d7360 (pci)
00000000fe300000 - 00000000fe3fffff ffffa40bff3e1360 (pci)
00000000fe400000 - 00000000fe4fffff ffffa40bff3dd360 (pci)
00000000fe500000 - 00000000fe5fffff ffffa40bff3f2360 (pci)
00000000fe600000 - 00000000fe6fffff ffffa40bff3ee360 (pci)
00000000fe700000 - 00000000fe7fffff ffffa40bff3e8360 (pci)
00000000fe800000 - 00000000fe8fffff ffffa40bfe2f2360 (pci)
00000000fe900000 - 00000000fe9fffff ffffa40bfeff2360 (pci)
00000000fea00000 - 00000000feafffff ffffa40bfe4f2360 (pci)
00000000fec00000 - 00000000fec0ffff 00000000 <Not on bus>
00000000fed00000 - 00000000fed003ff B ffffa40bfdae8d50
00000000fed40000 - 00000000fed44fff 00000000 <Not on bus>
00000000fee00000 - 00000000feefffff 00000000 <Not on bus>
00000000ffbc0000 - 00000000ffbfffff ffffa40bff3d5360 (vmci)
00000000ffc00000 - 00000000ffdfffff B ffffa40bfe6eed70
00000000ffe00000 - ffffffffffffffff
00000000ffe00000 - ffffffffffffffff C 00000000 <Not on bus>
0000200000000000 - ffffffffffffffff C 00000000 <Not on bus>
Possible allocation:
< none >
DEVNODE ffffa40bff3eaae0 (PCI\VEN_15AD&DEV_0790&SUBSYS_079015AD&REV_02\3&61aaa01&0&88)
Memory Arbiter "PCI Memory (b=2)" at ffffa40bfd5ef1c0
Allocated ranges:
0000000000000000 - 00000000f7ffffff
0000000000000000 - 00000000f7ffffff C 00000000 <Not on bus>
00000000e0000000 - 00000000e7ffffff CB 00000000 <Not on bus>
00000000f8500000 - 00000000fbffffff 00000000 <Not on bus>
00000000fc010000 - 00000000fc013fff ffffa40bfe7de060 (HDAudBus)
00000000fc015000 - 00000000fc015fff ffffa40bfe7df060 (usbehci)
00000000fc9ff000 - 00000000fc9fffff ffffa40bfe7e0060 (storahci)
00000000fca00000 - ffffffffffffffff 00000000 <Not on bus>
Possible allocation:
< none >
DEVNODE ffffa40bff3f0ae0 (PCI\VEN_15AD&DEV_07A0&SUBSYS_07A015AD&REV_01\3&61aaa01&0&A8)
Memory Arbiter "PCI Memory (b=3)" at ffffa40bfd5ef330
Allocated ranges:
0000000000000000 - 00000000fe9fffff
0000000000000000 - 00000000fe9fffff C 00000000 <Not on bus>
00000000e0000000 - 00000000e7ffffff CB 00000000 <Not on bus>
00000000feabc000 - 00000000feabffff ffffa40bfe3d9120 (e1i68x64)
00000000feac0000 - 00000000feadffff ffffa40bfe3d9120 (e1i68x64)
00000000feae0000 - 00000000feafffff ffffa40bfe3d9120 (e1i68x64)
00000000feb00000 - ffffffffffffffff 00000000 <Not on bus>
Possible allocation:
< none >
DEVNODE ffffa40bfefeaae0 (PCI\VEN_15AD&DEV_07A0&SUBSYS_07A015AD&REV_01\3&61aaa01&0&B0)
Memory Arbiter "PCI Memory (b=b)" at ffffa40bfe3f5a60
Allocated ranges:
0000000000000000 - 00000000fe1fffff
0000000000000000 - 00000000fe1fffff C 00000000 <Not on bus>
00000000e0000000 - 00000000e7ffffff CB 00000000 <Not on bus>
00000000fe200000 - 00000000fe21ffff ffffa40bfe3ee120 (USBXHCI)
00000000fe300000 - ffffffffffffffff 00000000 <Not on bus>
Possible allocation:
< none >
DEVNODE ffffa40bfefcca20 (PCI\VEN_15AD&DEV_07A0&SUBSYS_07A015AD&REV_01\3&61aaa01&0&B8)
Memory Arbiter "PCI Memory (b=13)" at ffffa40bfe6fa300
Allocated ranges:
0000000000000000 - 00000000fd9fffff
0000000000000000 - 00000000fd9fffff C 00000000 <Not on bus>
00000000e0000000 - 00000000e7ffffff CB 00000000 <Not on bus>
00000000fda00000 - 00000000fda03fff ffffa40bfe4e2060 (stornvme)
00000000fdb00000 - ffffffffffffffff 00000000 <Not on bus>
Possible allocation:
< none >
OS v.26100 arm64
DbgEng v.10.0.27553.104