02 2019 档案
摘要:模拟Windows线程切换(ThreadSwitch) 正在运行的线程在KPCR里,等待的线程在等待链表中,调度中的线程在那32个调度链表中。 创建它是从下标1的位置开始存的而不是0,因为main需要一个线程。 创建的线程还不能调度还需要初始化的环境,寄存器的值、当前线程的堆栈要确定 模拟线程切换总
阅读全文
摘要:KPCR: CPU控制区(Processor Control Region) 当线程进入0环时, FS:[0]指向KPCR(3环时FS[0]-> TEB)每个CPU都有一个KPCR结构体(一个核一个)KPCR中存储了CPU本身要用的一些重要数据: GDT, IDT以及线程相关的一些信息。在winbb
阅读全文
摘要:我们只想读4个字节,但我们要经过如下的步骤 在 10-10-12 分页模式下,CPU 每次要访问额外的访问 8 字节内存数据才能读取到数据 在2-9-9-12 分页模式下,需要额外的访问 24 字节内存数据才能读取到数据。 还有可能出现四个字节不在同一个物理页上的情况,这样效率就会变得非常低,所以出
阅读全文
摘要:0xC0300000就是页目录的基址。 随便找一个软件测试下 通过0xC0300000找到的物理页就是页目录表这个物理页即是页目录表本身也是页表页目录表是一张特殊的页表,每一项PTE指向的不是普通的物理页,而是指向其他的页表.如果我们要访问第N个PDE, 那么有如下公式:0xc0300000+N*4
阅读全文
摘要:我们通过JMP FAR可以实现段间的跳转,如果要实现跨段的调用就必须要学习CALL FAR,也就是长调用.CALL FAR比JMP FAR要复杂, JMP并不影响堆栈但CALL指令会影响. 长调用会先将调用者cs压栈,再将返回地址压栈,esp+8 随者权限的变化堆栈就会切换 总结:1跨段调用时,一日
阅读全文
摘要:分置法,挖坑填数 将第一个数作为基准数,所有数都和基准数比较 取完基准数后的坑必须填上才能前进 从右边向左开始找第一个小于基准数元素 9比基准数大continue(j要找比基准数小的),3比基准数小取出拿去填i指针的坑 3,2都比基准数小(i要找比基准数大的),到8将8取出填j指针的坑 (j要找比基
阅读全文

浙公网安备 33010602011771号