SCP-Firmware 核心代码

SCP-Firmware 在初始化后进入一个循环,处理 free_event_queue, event_queue 和 isr_event_queue 三个关键链表。事件由ACPU触发,经过 ISR 从 free 移至 isr_event_queue,再经 process_isr() 移至 event_queue,最后由 process_next_event() 处理并返回 free。module_table 定义了所有模块及其初始化函数,module 代表驱动,elements 是驱动实例。每个 module 对应一个上下文结构体 module_ctx_table,用于轻量级执行环境。" 89333066,8431542,利用通用gadget获取shell:深入探究leave|ret指令,"['逆向工程', '安全漏洞', '栈操作', 'Linux', 'exploit开发']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

queue处理片段

scp-firmware/framework/src/fwk_thread.c

noreturn void __fwk_thread_run(void)
{
    for (;;) {
        while (!fwk_list_is_empty(&ctx.event_queue))
            process_next_event();
        process_isr();
        fwk_log_unbuffer();
    }
}

scp-firmware在完成了所有的初始化操作后,执行的就是这个循环,然后永不退出。初看这可能不是很理解,这里面有三个重要的链表: free_event_queue, event_queue, isr_event_queue 所有的操作都是围绕这三个队列展开。
这三个队列在这里进行初始化,传入的event_count为64个。

int __fwk_thread_init(size_t event_count)
{
    struct fwk_event *event_table, *event;

    event_table = fwk_mm_calloc(event_count, sizeof(struct fwk_event));

    /* All the event structures are free to be used. */
    fwk_list_init(&ctx.free_event_queue);
    fwk_list_init(&ctx.event_queue);
    fwk_list_init(&ctx.isr_event_queue);

    for (event = event_table; event < (event_table + event_count); event++)
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值