数据流分析 学习笔记

学习CSCD70 和 南京大学《软件分析》课程中数据流分析部分的笔记与思考.
ps: 本篇有许多个人观点,如有错误虚心求教.

中间表示 IR

静态单赋值 SSA

静态单赋值(SSA),就是让每次对变量x赋值都重新使用一个新的变量xi,并在后续使用中选择最新的变量.
在控制流汇入同一个块时,导致多个变量备选,则使用合并操作符(phi-function),根据控制流的信息来决定选择哪个变量.

阅读更多...

QemuTimer Callback机制

前言

在做2021 HWS FastCP的时候,有这样一个场景.漏洞点是对CP_buffer的溢出读写,可以覆盖掉之后的QEMUTimer结构,自然想到劫持其的callback函数指针.

但又多想了一点,cp_timer的回调函数是在pci_FastCP_realize中调用timer_init_full注册(初始化)过的,说不定callback指针已经在另一个位置保存并作为之后回调使用,并不会调用该结构中的指针.

阅读更多...

HQOS 设计与实现

“THE MAN WHO CHANGED CHROME” 曾经指出如何学习计算机基础知识:

自己写一个CPU,在自己写的CPU上运行自己写的操作系统,然后用自己写的编译器编译运行一个程序.

于是便有了写一个操作系统的想法.在粗略看完一遍《操作系统真相还原》后,感觉从引导操作系统到实现各种操作系统概念的完整过程工作量有点太大了,暂时还没有那么多时间和精力来完成,便暂且搁置了.

感谢MIT的6.828课程,让我能在有限的时间里一步一步地实现一个操作系统雏形JOS.JOS的开发过程请查看 /学习笔记/6.828分类下的文章.

在接下来的一段时间,我会继续开发扩展该操作系统,并重构目前实现模型中我不太喜欢的实现,就叫它HQOS吧.

本博客记录当前版本HQOS的设计与实现,你可以在github上找到其历史文档及代码实现.
github

阅读更多...

MIT6.828 Lab6

Lab 6: Network Driver

Part A: Initialization and transmitting packets

time

在之前的时钟中断调度前加一个对time_tick函数的调用,注意时钟中断每个CPU都会收到,而我们的目的是计时,所以选择固定选择一个CPU来处理就好,bootcpu当然是最合适的.

1
2
3
4
5
6
case IRQ_OFFSET+IRQ_TIMER:
lapic_eoi();
if(thiscpu==bootcpu)
time_tick();
sched_yield();
return;
阅读更多...
  • Copyrights © 2022-2025 翰青HanQi

请我喝杯咖啡吧~

支付宝
微信