For the complete documentation index, see llms.txt. This page is also available as Markdown.

!dl (traverse through linked list using physical address)

Description of the '!dl' command in HyperDbg.

Command

!dl

Syntax

!dl [Address (hex)] [o Offset (hex)] [l Count (hex)]

Description

Walks a linked list starting at the specified physical address and shows each node.

Parameters

[Address (hex)]

The physical address of the head of the linked list.

[o Offset (hex)] (optional)

The offset (in bytes) within each node structure where the pointer to the next node is stored. (default: 0)

[l Count (hex)] (optional)

The maximum number of nodes to walk. (default: 100)

Examples

The following command walks the linked list starting at physical address 101305880.

The following command walks the linked list at @rax+@rbx with an offset of 8 bytes to the next pointer.

Note that the result of @rax+@rbx is 0x101305880 in this case.

SDK

To walk a linked list in the target debuggee using a physical address, you need to use the following function in libhyperdbg:

Pass DEBUGGER_READ_PHYSICAL_ADDRESS as memory_type when calling this function for physical addresses.

Remarks

  • If you don't specify the offset, the default offset is 0, meaning the next-pointer is at the very start of the node.

  • If you don't specify the count, HyperDbg walks at most 0x100 nodes by default.

  • For circular lists, HyperDbg automatically detects when the walk returns to the head and stops.

Physical addresses are not validated in HyperDbg, which means if you access an invalid physical address, then the debuggee halts or crashes.

This command is guaranteed to keep debuggee in a halt state (in Debugger Mode); thus, nothing will change during its execution.

Requirements

None

dl (traverse through linked list using virtual address)

!db, !dc, !dd, !dq (read physical memory)

!dt (display and map physical memory to structures)

Last updated