命令字:!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