Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan hozhat létre és tekinthet meg különböző típusú Linux-összeomlási memóriaképfájlokat. A Linux-összeomlási memóriaképek megtekintéséhez a WinDbg 1.2402.24001.0-s vagy újabb verziója szükséges.
Ha linuxos (nem Windows) alapvető memóriaképet nyit meg a WinDbg-ben, az alapszintű hibakereső parancsoknak megfelelően kell működniük, de a Windows-struktúrákra hivatkozó bővítmények és Windows-specifikus parancsok nem fognak működni.
Összeomlási memóriaképfájlok támogatása
Linux kernelképek
A Linux kernel tömörített KDUMP-ok megnyitása és a halottkori hibakeresés és elemzés teljes privát DWARF szimbólumokkal a Windows hibakeresőben érhető el.
A WinDbg csak a ZLIB tömörített KDUMP-fájlokat támogatja. Az LZO és a Snappy tömörített KDUMP-ok nem támogatottak.
A Linux KDUMP-okkal kapcsolatos általános információkért lásd a KDump (Linux) Wikipedia-oldalát és a Core dump Wikipedia-oldalát.
ELF memóriadumpok
Az Open Enclave támogatásának részeként a WinDbg képes megnyitni az ELF magos memóriaképeit és bináris fájljait, valamint a TÖRPE szimbólumokat (a TÖRPE 5 nem támogatott) az Enklávékból és Linux-alkalmazásokból. További információ az Open Enclave hibakereséséről: Open Enclave hibakeresés.
Folyamatkiürítések
Egyszeri folyamatelkiírások támogatottak. Számos módja van a folyamathiba-lerakatok gyűjtésének, például a Linux Sysinternals ProcDump for Linux segédprogram használata. Egy másik lehetőség a GNU Hibakereső – GDBServer használata egy magos memóriakép létrehozásához. További információ a GDBServerről: https://en.wikipedia.org/wiki/Gdbserver. A távoli gdb-hibakeresés dokumentációja elérhető a Sourceware webhelyén – Távoli programok hibakeresése.
Linux NATVIS-vizualizáció és DML-hivatkozás bejárásának engedélyezése
A Windows Hibakeresők standard sablontárát (STL) egy NatVis-fájl biztosítja, stl.natvis amely a Visual Studióval és a Windowssal együtt szállított STL számos verzióját ismeri. A NATVIS szolgáltatással kapcsolatos általános információkért tekintse meg a NatVis natív hibakereső objektumait. A Linux-összetevőkhöz (GCC-khez vagy LLDB-ekhez) használt STL-verziók nagyon eltérőek.
A NATVIS-vizualizáció és a Linuxra optimalizált DML-hivatkozás bejárásának engedélyezéséhez először távolítsa el az alapértelmezett natvis-fájlt, a .scriptunload fájltstl.natvis.
Ezután töltsd be a fájlt a gstl.natvis használatával. A .scriptlist használatával ellenőrizze, hogy aktív-e gstl.natvis .
0: kd> .scriptlist
Command Loaded Scripts:
...
NatVis script from 'C:\Users\Bob\AppData\Local\dbg\UI\2402.24001.0\amd64\Visualizers\gstl.natvis'
A DML használatával kapcsolatos további információkért lásd: A hibakereső kimenetének testreszabása DML használatával.
A DisplayGreeting alkalmazás egyetlen folyamatmag-kiírása
Ez a példa bemutatja, hogyan hozhat létre egyetlen folyamatmag-memóriaképet a gdb használatával. A GDBServer WinDbg-lel való használatáról és egy kódbemutatóról további információt a Linux élő távoli folyamat hibakeresésében talál. A DisplayGreeting példakódjához tekintse meg a C++ alkalmazás útmutatóját.
A kívánt folyamat megkeresése
A linuxos összes folyamatot listázhatjuk a ps -A paranccsal, vagy használhatjuk a -f lehetőséget a pgrep használatával, mivel tudjuk, hogy a DisplayGreeting alkalmazást keressük.
$ pgrep -f DisplayGreeting
9382
Ebben a példában az útmutató egy 9382-ből álló folyamatazonosítót jelenít meg.
Csatolás a gdb-vel történő feldolgozáshoz és magdömping létrehozása
A gdb használatával csatlakozzon a folyamathoz.
$ gdb -p 9382
A generate-core-file gdb parancs súgójának megjelenítése.
(gdb) help generate-core-file
Save a core file with the current state of the debugged process.
Argument is optional filename. Default filename is 'core.<process_id>'.
Ezután a (gdb) parancssorban hozzon létre egy folyamatmag-memóriaképfájlt az alapértelmezett fájlnévvel.
(gdb) generate-core-file
Saved corefile core.9382
(gdb) quit
A Linux folyamatmag-dump betöltése és vizsgálata
A létrehozott magkép betöltéséhez használja a WinDbg Memóriadump megnyitása menüt.
Forrás- és szimbólumútvonalak hozzáadása a hibakereső munkamenethez
A forráskód és a változók megtekintéséhez állítsa be a szimbólumokat és a forrás elérési útját. A szimbólumok elérési útjának beállításával kapcsolatos általános információkért lásd a Szimbólumok használata című témakört. A Linux-szimbólumokkal kapcsolatos részletesebb információkért lásd a Linux-szimbólumokat és -forrásokat.
A szimbólum elérési útjának a hibakereső munkamenethez való hozzáadásához használható .sympath . Ebben a WSL Linux Ubuntu-példában a DisplayGreetings kód és szimbólumok érhetők el ezen a helyen egy Bob nevű felhasználó számára.
\\wsl$\Ubuntu\mnt\c\Users\Bob\
A WSL-ben ez a könyvtár megfelel a Windows operációs rendszer helyének: C:\Users\Bob\ Tehát ezt a két parancsot használja a rendszer.
.sympath C:\Users\Bob\
.srcpath C:\Users\Bob\
A WSL fájlrendszer windowsos eléréséről további információt a WSL fájlengedélyei című témakörben talál.
Ha további Linux operációsrendszer-szimbólumokat szeretne használni, adja hozzá a DebugInfoD szimbólumokat a .sympath hely használatával.
.sympath+ DebugInfoD*https://debuginfod.elfutils.org
.reload A parancs használatával töltse be újra a szimbólumokat.
Emellett támogatott a források automatikus letöltése a DebugInfoD-kiszolgálókról, amelyek támogatják az adott összetevőtípus visszaadását. A funkció előnyeinek kihasználásához adja hozzá a elfutils kiszolgálót a .srcpath használatával.
.srcpath+ DebugInfoD*https://debuginfod.elfutils.org
A folyamatkép vizsgálata
A lm parancs segítségével ellenőrizze, hogy a memóriaképfájl tartalmazza-e a DisplayGreeting alkalmazást.
0:000> lm
start end module name
00005555`55554000 00005555`55558140 DisplayGreeting T (service symbols: DWARF Private Symbols) c:\users\bob\DisplayGreeting
00007fff`f7a54000 00007fff`f7a732e8 libgcc_s_so (deferred)
00007fff`f7a74000 00007fff`f7b5a108 libm_so (deferred)
00007fff`f7b5b000 00007fff`f7d82e50 libc_so T (service symbols: DWARF Private Symbols) C:\ProgramData\Dbg\sym\_.debug\elf-buildid-sym-a43bfc8428df6623cd498c9c0caeb91aec9be4f9\_.debug
00007fff`f7d83000 00007fff`f7fae8c0 libstdc___so (deferred)
00007fff`f7fc1000 00007fff`f7fc1000 linux_vdso_so (deferred)
00007fff`f7fc3000 00007fff`f7ffe2d8 ld_linux_x86_64_so T (service symbols: DWARF Private Symbols) C:\ProgramData\Dbg\sym\_.debug\elf-buildid-sym-9718d3757f00d2366056830aae09698dbd35e32c\_.debug
Vegye figyelembe, hogy az első parancs végrehajtása eltarthat egy kis ideig, mivel a hibakeresési szimbólumok betöltve vannak a gyorsítótárba. Amellett, hogy szimbólumokat és bináris fájlokat keres a szimbólumkiszolgálón vagy a helyi keresési útvonalon keresztül, a GDBServer integrációja miatt ezeket a fájlokat egy távoli fájlrendszerből is betöltheti, ha nem találhatók helyileg. Ez a művelet általában lassabb, mint a szimszrv vagy egy helyi keresési útvonal szimbólumainak beszerzése.
x A parancs használatával megjelenítheti a DisplayGreetingben elérhető függvényeket.
0:000> x /D /f DisplayGreeting!*
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
*** WARNING: Unable to verify timestamp for DisplayGreeting
00005651`7935b331 DisplayGreeting!_GLOBAL__sub_I__Z17GetCppConGreetingPwm (void)
00005651`7935b2db DisplayGreeting!__static_initialization_and_destruction_0 (int, int)
00005651`7935b37b DisplayGreeting!std::__array_traits<wchar_t, 50>::_S_ptr (wchar_t (*)[50])
00005651`7935b368 DisplayGreeting!std::array<wchar_t, 50>::size (std::array<wchar_t, 50> *)
00005651`7935b34a DisplayGreeting!std::array<wchar_t, 50>::data (std::array<wchar_t, 50> *)
00005651`7935b225 DisplayGreeting!main (void)
00005651`7935b1e9 DisplayGreeting!GetCppConGreeting (wchar_t *, size_t)
dx A parancs használatával megtekintheti a helyi változó üdvözletét.
0:000> dx greeting
...
Error: Unable to bind name 'greeting'
Mivel az üdvözlés paraméter még nem volt használatban a mentés elkészítésekor, nem érhető el a mentés fájljában.
A dx parancsot használja a memóriaképfájlban elérhető folyamatok vizsgálatához.
:000> dx @$cursession.Processes.Take(30)
@$cursession.Processes.Take(30)
[0x24a6] : DisplayGreeting [Switch To]
Click on the `[Switch To]` DML link to switch to the 9382 process.
```dbgcmd
0:000> dx -s @$cursession.Processes.Take(30)[9382].SwitchTo()
0:000> dx -r1 @$cursession.Processes.Take(30)[9382]
@$cursession.Processes.Take(30)[9382] : DisplayGreeting [Switch To]
Name : DisplayGreeting
Id : 0x24a6
Index : 0x0
Handle : 0x24a6
Threads
Modules
Environment
Direct3D
Attributes
Devices
Io
Memory
TTD
GroupedStacks
A szálakra és modulokra vonatkozó információk megtekintéséhez kattintson a kimenetben létrehozott DML-hivatkozásra, vagy írja be az összeomlási memóriaképhez hasonló parancsokat.
0:000> dx -r1 @$cursession.Processes.Take(30)[9382].Threads
@$cursession.Processes.Take(30)[9382].Threads
[0x24a6] [Switch To]
0:000> dx -r1 @$cursession.Processes.Take(30)[9382].Modules
@$cursession.Processes.Take(30)[9382].Modules
[0x0] : /mnt/c/Users/Bob/DisplayGreeting
[0x1] : /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
[0x2] : /usr/lib/x86_64-linux-gnu/libm.so.6
[0x3] : /usr/lib/x86_64-linux-gnu/libc.so.6
[0x4] : /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
[0x5] : /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
[0x6] : linux-vdso.so.1
A memóriaképfájl adatainak megjelenítéséhez használja az ELF/CORE diagnosztikai bővítményeket
Használja a Linux diagnosztikai bővítményeket – ELFBinComposition.dll a dömpfájl adatainak megjelenítéséhez. Például használja a !dumpdebug parancsot annak megerősítésére, hogy ez egy ELF felhasználói magkép, és más információkat is megjeleníthet.
0:000> !dumpdebug
Dump Diagnostics: Format = ELF User Core
********************************************************************************
File Mapping Size: 0x151d78 (1 Mb)
Highest Memory Offset: 0x14e5f0 (1 Mb)
...
A NT_PRPSINFO adatok megjelenítésére használható !ntprpsinfo .
0:000> !ntprpsinfo
NT_PRPSINFO (process info):
state: 0, sname: t, zomb: 0, nice: 0, flag: 0x4040000019999999
uid: 1000, gid: 1000, pid: 9382, ppid: 388, pgrp: 9382, sid: 388
fname: DisplayGreeting
psargs: ./DisplayGreeting
Kernel KDump összeomlásmentések
Linuxon sokféleképpen hozhat létre összeomlási memóriaképfájlt. Az Ubuntu Linuxot tartalmazó egyik lehetőséget például a Kernel összeomlási memóriaképe ismerteti.
Más lehetőségek közé tartozik a kexec-tools használata a Kdump engedélyezéséhez. További információ: KDump (Linux). Ha a kdump engedélyezve van, ellenőrizheti, hogy a kdump aktív és fut-e a systemctl status kdump használatával.
Miután az operációs rendszer összeomlása kiváltva lett egy tesztrendszeren, létrejön a rendszerösszeomlási naplófájl.
A Linux operációs rendszer összeomlási memóriaképének betöltése és vizsgálata
A létrehozott kdump betöltéséhez használja a Memóriaképfájl megnyitása menüt.
Az előző szakaszban leírtak szerint engedélyezze a NATVIS-vizualizációt és a Linuxra optimalizált DML-hivatkozás bejárását a gstl.natvis fájl betöltésével.
Linux kernel memóriakiírásának elemzése ELF Bin összeállítási parancsokkal
Ha további ELF Bin-összeállítási parancsokat szeretne használni, a .chain paranccsal győződjön meg arról, hogy a ELFBinComposition.dll be van töltve.
0: kd> .chain
Extension DLL chain:
ELFBinComposition: image 10.0.27606.1000, API 0.0.0,
[path: C:\Users\Bob\AppData\Local\dbg\UI\Fast.20240423.1\amd64\winext\ELFBinComposition.dll]
...
Ha az ELFBinComposition nincs betöltve, használja a .load-ot a betöltéshez. További információ: .load, .loadby (Load Extension DLL)
!ELFBinComposition.dumpdebug A parancs használatával megjelenítheti a betöltött memóriaképfájl adatait. Ebben a példában egy ELF felhasználói mag memóriaképfájl lett betöltve.
0: kd> !ELFBinComposition.dumpdebug
Dump Diagnostics: Format = Kernel KDump
********************************************************************************
File Mapping Size: 0x3b34090 (59 Mb)
Highest Memory Offset: 0x3b34090 (59 Mb)
Az ELFBinComposition !vmcoreinfo használatával megjelenítheti a VMCOREINFO táblát a hibakeresés alatt álló Linux kernelmag-memóriaképből (KDUMP).
0: kd> !vmcoreinfo
VMCOREINFO:
OSRELEASE=6.5.0-25-generic
BUILD-ID=8567ad7c7c2f78f3654f6cc90a9e1b3f9c3a4b32
PAGESIZE=4096
SYMBOL(init_uts_ns)=ffffded86e11b388
OFFSET(uts_namespace.name)=0
SYMBOL(node_online_map)=ffffded86dcceb40
SYMBOL(swapper_pg_dir)=ffffded86d143000
SYMBOL(_stext)=ffffded86ace0000
SYMBOL(vmap_area_list)=ffffded86de48140
SYMBOL(mem_section)=ffff0f2e1efe4600
LENGTH(mem_section)=8192
...
Használja a !kdumppagerange-t a memóriaképfájl első részének kiírásához, nullától kezdődően.
0: kd> !kdumppagerange 0
PFNs [0x540e0, 0x55643) -> Descs [0x0, 0x1563): File Offsets [0x307430, 0xeeb37a) 0xbe3f4a bytes across 5475 pages as ZLIB
PFNs [0x55643, 0x55650) -> Descs [0x1563, 0x1570): File Offsets [0x306430, 0x307430) 0x1000 bytes across 13 duplicate pages as Uncompressed
PFNs [0x55650, 0x556d6) -> Descs [0x1570, 0x15f6): File Offsets [0xeeb37a, 0xf0c405) 0x2108b bytes across 134 pages as ZLIB
PFNs [0x556d6, 0x556dc) -> Descs [0x15f6, 0x15fc): File Offsets [0xf0c405, 0xf12405) 0x6000 bytes across 6 pages as Uncompressed
PFNs [0x556dc, 0x55e98) -> Descs [0x15fc, 0x1db8): File Offsets [0xf12405, 0x1216d1b) 0x304916 bytes across 1980 pages as ZLIB
PFNs [0x55e98, 0x55ea4) -> Descs [0x1db8, 0x1dc4): File Offsets [0x1216d1b, 0x1222d1b) 0xc000 bytes across 12 pages as Uncompressed
PFNs [0x55ea4, 0x56542) -> Descs [0x1dc4, 0x2462): File Offsets [0x1222d1b, 0x14ba138) 0x29741d bytes across 1694 pages as ZLIB
PFNs [0x56542, 0x56543) -> Descs [0x2462, 0x2463): File Offsets [0x306430, 0x307430) 0x1000 bytes across 1 pages as Uncompressed
PFNs [0x56543, 0x56544) -> Descs [0x2463, 0x2464): File Offsets [0x14ba138, 0x14ba194) 0x5c bytes across 1 pages as ZLIB
PFNs [0x56544, 0x5654f) -> Descs [0x2464, 0x246f): File Offsets [0x306430, 0x307430) 0x1000 bytes across 11 duplicate pages as Uncompressed
A !kdumppagerange kimenete különböző lapkeret -értékeket (PFN) jelenít meg. Kiválaszthatunk egy érdekeset, és a !kdumppfn <PFN> használatával megjeleníthetjük a PFN-ről és az adatok KDUMP-beli helyzetéről szóló információkat.
0: kd> !kdumppfn 0x540e0
Page frame 0x540e0 = File offset [0x307430, 0x307b9f) 0x76f bytes as ZLIB...
A memóriaképfájl vizsgálata
k A parancs használatával megjelenítheti a hívási vermet annak vizsgálatához, hogy melyik kód futott az összeomláskor.
6: kd> k
# Child-SP RetAddr Call Site
00 ffff0000`0bc3bc90 ffff0000`085161f8 vmlinux!sysrq_handle_crash+0x24 [/usr/src/kernel/drivers/tty\sysrq.c @ 147]
01 ffff0000`0bc3bca0 ffff0000`08516824 vmlinux!__handle_sysrq+0x88 [/usr/src/kernel/drivers/tty\sysrq.c @ 583]
02 ffff0000`0bc3bcb0 ffff0000`08308990 vmlinux!write_sysrq_trigger+0xb4 [/usr/src/kernel/drivers/tty\sysrq.c @ 1110]
03 ffff0000`0bc3bcf0 ffff0000`08290070 vmlinux!proc_reg_write+0x80 [/usr/src/kernel/fs/proc\inode.c @ 245]
04 ffff0000`0bc3bd10 ffff0000`0829039c vmlinux!__vfs_write+0x60 [/usr/src/kernel/fs\read_write.c @ 490]
05 ffff0000`0bc3bd50 ffff0000`08290704 vmlinux!vfs_write+0xac [/usr/src/kernel/fs\read_write.c @ 550]
06 ffff0000`0bc3be00 ffff0000`082907a4 vmlinux!ksys_write+0x74 [/usr/src/kernel/fs\read_write.c @ 599]
07 (Inline Function) --------`-------- vmlinux!__do_sys_write+0xc [/usr/src/kernel/fs\read_write.c @ 608]
08 (Inline Function) --------`-------- vmlinux!__se_sys_write+0xc [/usr/src/kernel/fs\read_write.c @ 608]
09 ffff0000`0bc3be40 ffff0000`08095904 vmlinux!__arm64_sys_write+0x24 [/usr/src/kernel/fs\read_write.c @ 608]
0a ffff0000`0bc3be90 ffff0000`080834c8 vmlinux!el0_svc_handler+0x94
0b ffff0000`0bc3beb0 00000000`00000000 vmlinux!el0_svc+0x8
dx A parancs használatával vizsgálja meg a memóriaképfájlt. Tekintse meg például az első 30 folyamatot ezzel a paranccsal.
6: kd> dx @$cursession.Processes.Take(30)
@$cursession.Processes.Take(30)
[0x0] : swapper/0 [Switch To]
[0x1] : systemd [Switch To]
[0x2] : kthreadd [Switch To]
[0x3] : rcu_gp [Switch To]
[0x4] : rcu_par_gp [Switch To]
[0x5] : kworker/0:0 [Switch To]
[0x6] : kworker/0:0H [Switch To]
[0x7] : kworker/u16:0 [Switch To]
[0x8] : mm_percpu_wq [Switch To]
[0x9] : ksoftirqd/0 [Switch To]
[0xa] : rcu_sched [Switch To]
[0xb] : rcu_bh [Switch To]
[0xc] : migration/0 [Switch To]
...
Kattintson a DML-hivatkozásokra, vagy használja az ehhez hasonló parancsokat egy érdekes folyamat szálainak megtekintéséhez.
6: kd> dx @$cursession.Processes[0x1a].Threads
@$cursession.Processes[0x1a].Threads
[0x1a] [Switch To]
6: kd> dx @$cursession.Processes[0x1a].Threads[0x1a]
@$cursession.Processes[0x1a].Threads[0x1a] [Switch To]
KernelObject [Type: thread_struct]
Id : 0x1a
Stack
Registers
Environment
Analysis
WaitChain
Scheduling
IRPs
...
Az egyes szálakról további információk érhetők el az alábbiakban látható módon.
6: kd> dx @$cursession.Processes[0x1a].Threads[0x1a].KernelObject
@$cursession.Processes[0x1a].Threads[0x1a].KernelObject [Type: thread_struct]
[+0x000] cpu_context [Type: cpu_context]
[+0x070] uw [Type: <unnamed-tag>]
[+0x290] fpsimd_cpu : 0x100 [Type: unsigned int]
[+0x298] sve_state : 0x0 [Type: void *]
[+0x2a0] sve_vl : 0x0 [Type: unsigned int]
[+0x2a4] sve_vl_onexec : 0x0 [Type: unsigned int]
[+0x2a8] fault_address : 0x0 [Type: long unsigned int]
[+0x2b0] fault_code : 0x0 [Type: long unsigned int]
[+0x2b8] debug [Type: debug_info]
6: kd> dx -s @$cursession.Processes[0x1a].Threads[0x1a].SwitchTo()
Process ffff8008`0f894380 has invalid page directories
Linux-kernel-memóriakép elemzése a LinuxKernel.js szkripttel
A LinuxKernel.js hibakereső bővítmény olyan parancsokat tartalmaz, amelyek hasonlóan működnek, mint a Linux összeomlási segédprogramban található parancsok, amelyek a Linux Kernel mód összeomlásainak megnyitására és elemzésére szolgálnak.
A szkript használatához először töltse be a szkriptet.
0: kd> .scriptload LinuxKernel.js
JavaScript script successfully loaded from 'C:\Users\Bob\AppData\Local\dbg\UI\Fast.20240423.1\amd64\winext\LinuxKernel.js'
A szkriptek betöltésével kapcsolatos további információkért lásd: JavaScript Debugger Scripting.
Fájlok!
Az !files használatával jelenítse meg a dump fájlban a Linux fájlrendszerével kapcsolatos információkat. Hasonló az összeomlási fájlokhoz kapcsolódó parancshoz.
6: kd> !files
@$files() : Files for process 'sh' (pid 545) root dir = '/' working dir = '/home/root'
[0x0] : /dev/ttyS0 [Type: file]
[0x1] : /proc/sysrq-trigger [Type: file]
[0x2] : /dev/ttyS0 [Type: file]
[0xa] : /dev/ttyS0 [Type: file]
[0xff] : /dev/ttyS0 [Type: file]
!files szintaxis:
!files [<arg>]
Nélkül [<arg>] - Egyenértékű a "fájlok:" - megadja az aktuális folyamat fájllistáját
[<arg>]:
pid - Megadja a megadott folyamatazonosító fájllistáját
64-bit num - Megadja a feladat fájllistáját a megadott címen
<task struct [*]> – Megadja az adott feladatszerkezet fájllistáját objektum szerint
<process object> – Megadja a folyamatobjektum által képviselt feladat fájllistáját
!felszerel
Az !mount használatával jelenítse meg a dump fájlban a Linux fájlrendszerével kapcsolatos információkat.
6: kd> !mount
@$mount()
[0x0] : (rootfs) rootfs at / [Type: mount]
[0x1] : (squashfs) /dev/mapper/nested_rootfs at / [Type: mount]
[0x2] : (sysfs) sysfs at /sys [Type: mount]
[0x3] : (proc) proc at /proc [Type: mount]
[0x4] : (devtmpfs) devtmpfs at /dev [Type: mount]
[0x5] : (securityfs) securityfs at /kernel/security [Type: mount]
!mount szintaxis:
Anélkül [<arg>]– Egyenértékű a "csatlakoztatás" paranccsal – csatlakoztatott fájlrendszereket jelenít meg
[<arg>]:
pid - Megadja a csatolt fájlrendszereket a folyamat névterének az adott pid-vel
64-bit num - A cím alapján megadott task_struct névterehez tartozó csatlakoztatott fájlrendszereket adja meg
<task struct [*]> - Megjeleníti a csatolt fájlrendszereket az adott task_struct névteréhez
<process object> - Megjeleníti a csatlakoztatott fájlrendszereket a folyamat által meghatározott feladat névterében.
!net
A rendszer hálózati listájának megjelenítéséhez használja a !net elemet.
6: kd> !net
@$net()
[0x0] : lo (127.0.0.1) [Type: net_device]
[0x1] : enP8p1s0f0np0 (192.168.3.19) [Type: net_device]
[0x2] : enP8p1s0f1np0 [Type: net_device]
!net szintaxis:
!net [<arg>]
Nélkül [<arg>]- Egyenértékű a "net" - ad rendszer hálózati listát
[<arg>]:
pid - Megadja a folyamat névterének nettó listáját az adott pid használatával
64-bit num - Megadja a cím alapján megadott task_struct névterének nettó listáját
<task struct [*]> - Megadja az adott task_struct névterének nettó listáját
<process object> - Megadja a folyamat által képviselt tevékenység névterének nettó listáját
!runq
A parancs használatával !runq megjelenítheti a futtatási várólistán lévő feladatokkal kapcsolatos információkat.
0: kd> !runq
@$runq()
[0x0] : CPU 0 run queue [current = 'bash' (17ca)]
Cpu : 0x0
RunQueue [Type: rq]
CurrentTask : bash [Type: task_struct]
RTTasks
CfsTasks
[0x16b3] : kworker/0:7 [Type: task_struct]
[0x1] : CPU 1 run queue [current = 'swapper/1' (0)]
Cpu : 0x1
RunQueue [Type: rq]
CurrentTask : swapper/1 [Type: task_struct]
RTTasks
CfsTasks
!runq szintaxis:
!runq
A!runq nem rendelkezik parancsparaméterekkel.
További kernelkép-parancsok
!dev – Megjeleníti az eszköz karakter- és blokkadatait, hozzárendeléseit, I/O-porthasználatát, I/O-memóriahasználatát.
!log – Megjeleníti a kernel log_buf tartalmát.
!vm – Megjeleníti a virtuális memória használatának összegzését.
!timer – Megjeleníti az időzítő sor bejegyzéseit.
dx parancs és Linux-objektumok
A dx parancs használható a kdumps vizsgálatára. A Munkamenetek objektum megjelenítése a különböző elérhető gyermekobjektumok megtekintéséhez.
0: kd> dx -r3 Debugger.Sessions[0]
Debugger.Sessions[0] : Target Composition Target
Processes
[0x0] : swapper/0 [Switch To]
KernelObject : swapper/0 [Type: task_struct]
Name : swapper/0
Id : 0x0
Index : 0x0
Threads
Modules
Environment
Direct3D
Attributes
Devices
Io
Memory
GroupedStacks
...
A cursession Kernel objektum tartalmazza a PrintKLog objektumot, amely a kernelnapló megtekintésére használható.
6: kd> dx @$cursession.Kernel.PrintKLog.Take(4)
@$cursession.Kernel.PrintKLog.Take(4)
[0x0] : [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd083]
[0x1] : [ 0.000000] Linux version 4.19.90-microsoft-standard (oe-user@oe-host) (gcc version 8.2.0 (GCC)) #1 SMP Fri Mar 27 14:25:24 UTC 2020..
[0x2] : [ 0.000002] sched_clock: 64 bits at 125MHz, resolution 8ns, wraps every 4398046511100ns
[0x3] : [ 0.000003] 17.250901928 MSFT: kernel boot start
Ez a dx parancs bemutatja, hogyan lehet a .Contains() segítségével megkeresni a konkrét sztringeket a naplóban.
6: kd> dx @$cursession.Kernel.PrintKLog.Where(le => le.ToLower().Contains("oops") || le.ToLower().Contains("crash"))
@$cursession.Kernel.PrintKLog.Where(le => le.ToLower().Contains("oops") || le.ToLower().Contains("crash"))
[0x0] : [ 0.000493] crashkernel reserved: 0x00000000dc600000 - 0x00000000fc600000 (512 MB)
[0x1] : [ 0.078790] Kernel command line: console=ttyS0,115200n8 earlycon=uart8250,mmio32,0x68A10000 crashkernel=512M enforcing=0 ipe.enforce=0
[0x2] : [ 26.621228] sysrq: SysRq : Trigger a crash
[0x3] : [ 26.621254] Internal error: Oops: 96000044 [#1] SMP
[0x4] : [ 26.656655] pc : sysrq_handle_crash+0x24/0x30
[0x5] : [ 26.753494] sysrq_handle_crash+0x24/0x30
[0x6] : [ 26.801441] Starting crashdump kernel...8J»=.
Az utolsó naplózott események megjelenítésére használható .Reverse() .
2: kd> dx @$cursession.Kernel.PrintKLog.Reverse().Take(5).Reverse()
@$cursession.Kernel.PrintKLog.Reverse().Take(5).Reverse()
[0x0] : [3147944.378367] kthread+0x118/0x2a4
[0x1] : [3147944.381876] ret_from_fork+0x10/0x18
[0x2] : [3147944.385747] Code: 78002507 36000042 39000107 d65f03c0 (cb0803e4)
[0x3] : [3147944.392221] SMP: stopping secondary CPUs
[0x4] : [3147944.397539] Starting crashdump kernel...
További információ a LINQ-lekérdezések dx paranccsal való használatáról: LINQ használata hibakereső objektumokkal.
Linux diagnosztikai bővítmények – ELFBinComposition.dll
A következő Linux memóriadump diagnosztikai bővítmények érhetők el a ELFBinComposition.dll.
Fájlmentési parancsok
Ezek a parancsok a legtöbb memóriaképfájlban használhatók.
!dumpdebug - Megjeleníti a hibakeresés alatt álló mag memóriakép diagnosztikáit. Ez magában foglalja a különböző más parancsok kimenetét is.
!ntprstatus - Megjeleníti az NT_PRSTATUS rekordokat a hibakeresés alatt álló magkép fájlból.
!vmcoreinfo - Megjeleníti a VMCOREINFO táblát a hibakeresés alatt álló kernelmag-memóriaképből (KDUMP).
ELF kiíratási parancsok
Ezek a parancsok csak ELF formátumú rendszermag-memóriaképfájlokon használhatók.
!corephdrs – Megjeleníti a hibakeresés alatt álló magfájl fejléc táblázatát.
!ntprpsinfo - Megjeleníti az NT_PRPSINFO adatokat a magkép hibakeresés alatt lévő részéből.
!ntfile - Megjeleníti a NT_FILE adatokat a hibakeresés alatt álló alapvető memóriaképből.
!ntauxv - Megjeleníti az NT_AUXV adatokat a hibakeresett magfájlból.
Kernel összeomlási memóriaképének fájlparancsai
Ezek a parancsok csak kernelmag-memóriaképek (KDUMP) fájljain használhatók.
!kdumpdescs - Az oldaltartományok és oldalleírók listájának megjelenítése KDUMP-ban.
!kdumppagerange <n> – A KDUMP lapjainak n-edik csoportosításával kapcsolatos információk megjelenítése.
!kdumppfn <pfn> – Megjelenítheti az oldalkerettel <pfn> kapcsolatos információkat, és hogy az adatok hol találhatók a KDUMP-ben.
Egyéb diagnosztikai parancsok
!cppex - Megjeleníti az aktuális szálon lévő C++ kivételek adatait, amelyek nincsenek vagy éppen csak lettek kezelve, a libstdc++ belső struktúrái és a DWARF szimbólumok használatával.
!cppfilt [-n] <mangled name> - Visszafejt egy C++ mangled nevet, mintha a c++filt eszközön futna. További információ a C==filtr eszközről: c++filt(1) – Linux manuális oldal.
!rustdemangle <mangled name> - Visszaalakítja a Rust eltorzított nevet. További információ a Rust szimbólumnevek eltorzításáról: Rust Symbol Mangling - RFC 2603.