一个可用于检查进程内存、地址和符号的CS BOF!
| 命令 | 描述 |
|---|---|
| lm | 列出所有已加载的模块及其基址、入口点等信息 |
| addr | 打印指定内存地址处的字节 |
| meminfo | 打印指定内存地址的相关信息 |
| lt | 打印当前进程中所有活动线程及相关基本信息 |
| regdump | 打印线程寄存器的内容 |
请提交补丁!欢迎推荐更多命令!
lm 命令列出当前进程中已加载的模块。当不带参数调用时,返回所有已加载的 DLL;当给定一个 DLL 名称时,返回该模块的详细信息(基址、入口点、大小、完整路径)。
语法
psi lm [dll]
参数:
dll(可选):要查找的已加载 DLL 的名称。如果省略,则列出所有已加载的模块。示例:
psi lm
psi lm ntdll.dll
psi lm kernel32.dll
addr 命令返回给定地址处的值
语法:
psi addr <address> <type> [count]
address:要检查的十六进制地址type:控制如何处理给定地址的数据类型。有效值为:BYTE、WORD、DWORD、LPVOID。因此,如果用户提供值 DWORD,则读取该地址处大小为 size(DWORD) 的一块数据。每个块将作为以 0x 前缀的小端值打印,其宽度等于类型大小(例如,WORD 行分组为 0xaabb 0xccdd ...)。类型名称大小写不敏感。相同大小的 Win32 别名(int、ULONG、ULONG64、HANDLE 等)有意省略——请使用 BYTE/WORD/DWORD/LPVOID 进行 1/2/4/8 字节的读取。count:要读取的块数。此参数可选,默认为 1输出应为从给定地址开始的十六进制转储,块会分组在一起
示例:
psi addr 0xdeadbeef DWORD 2
psi addr 0xdeadbeef LPVOID
psi addr 0xdeadbeef WORD 8
meminfo 命令返回有关给定内存地址的各种信息,包括:
语法:
psi meminfo <address>
address:要检查的十六进制地址示例:
psi addr 0xdeadbeef
lt 命令打印当前进程的所有线程及其 TID 和入口点
语法
psi lt
regdump 命令转储线程的 CPU 寄存器。线程 ID(tid)是可选的:如果省略,则通过 RtlCaptureContext 转储调用 Beacon 线程;如果提供,则当前进程中的该线程在快照期间被挂起。如果提供了寄存器名称,则仅打印该寄存器;否则转储所有支持的寄存器,包括完整的 x64 GPR 集以及 RFLAGS、段寄存器、调试寄存器、SSE (XMM)、AVX/AVX2 (YMM) 和 AVX-512 (ZMM / kmask) — 后三项依赖于主机 CPU 特性支持。寄存器名称大小写不敏感,并接受子宽度别名(例如,eax、ax、ah、al 都解析为同一个底层 GPR)。
语法:
psi regdump [tid] [register]
tid:要转储其上下文的可选线程 ID。如果省略,则直接捕获调用 Beacon 线程。register:可选寄存器名称,用于将输出过滤为单个寄存器。需要指定 tid。示例:
psi regdump
psi regdump 12345
psi regdump 12345 rip
psi regdump 12345 ymm0
要编译 BOF,请更新 src/hello.cc 文件或 Makefile 以反映必要的更改,然后输入:
$ docker-compose up --build