命令字:!ndx.cmdline
用法描述:
打印内核的启动参数,和cat /proc/cmdline输出的信息一致
开发过程:
1.找到关键全局变量
2.明确类型:
这是一个指向字符(char)类型的指针变量
3.读取变量
DECLARE_API(cmdline)
{
ULONG64 saved_command_line = 0;
ULONG read;
GetExpressionEx("lk!saved_command_line", &saved_command_line, NULL);
if (saved_command_line == 0) {
dprintf("Failed to get saved_command_line address. Please fix symbol.\n");
return;
}
ULONG64 linux_cmdline = 0;
char cmdline[1024];
ReadPointer(saved_command_line, &linux_cmdline);
dprintf("lk!saved_command_line: %p -> %p\n", saved_command_line, linux_cmdline);
ExtReadMemory(linux_cmdline, cmdline, sizeof(cmdline), &read);
dprintf("Read %d bytes.\n", read);
}
4.优化显示
直接打印字符串的内容,存在一个问题:字符串过长,需要查看后面的参数内容,需要调整下方的滚动条,不太方便
按空格截断参数显示,按列输出。
// 创建命令行副本用于解析
char cmdline_copy[1024];
strncpy_s(cmdline_copy, sizeof(cmdline_copy), cmdline, _TRUNCATE);
// 使用 strtok 分割参数
char* token = strtok(cmdline_copy, " ");
int param_count = 1;
while (token != NULL) {
// 跳过空字符串
if (strlen(token) > 0) {
dprintf("[%2d] %s\n", param_count, token);
param_count++;
}
token = strtok(NULL, " ");
}
作者:郭建程 创建时间:2025-09-01 10:51
最后编辑:郭建程 更新时间:2025-09-11 16:05
最后编辑:郭建程 更新时间:2025-09-11 16:05