双引擎 GPU 容器虚拟化,用户态和内核态的技术解析和实践分享
实现资源虚拟化隔离,首先需要资源在时间或空间维度是可分的,在用户视角看来就是多个任务可以并发(concurrent)或并行(parallel)地执行。这里我们在用户态、内核态、硬件多个层次上讨论一下并行或并发空间。由于NV的软硬件生态是闭源的,这里的示意图是我们综合架构白皮书,逆向论文和我们自己的理解而绘制的,不准确的地...
手把手教你如何用 ROP 绕过数据执行保护
“xchg”指令用于交换EAX寄存器和ESP寄存器的内容,从而执行VirtualAlloc函数:ROP小工具链的最后一部分如下所示:执行VirtualAllocAPI后,我们可以看到缓冲区现在是可执行的:我们可以确定shellcode地址和最后一个ROP小工具之间的距离是0x9C字节。我们添加了0x9C填充字节,然后添加了一个包含NOP指令的伪shellcode,以确认...
操作系统基础: C 语言实现用户态线程
当指令执行ret指令的时候,CPU会从当前栈顶弹出一个值到eip寄存器!这意味着要发生跳转了!通用寄存器中,有一个寄存器名为esp,它保存的是栈顶指针(内存地址的值)。指令push、pop、call、ret都依赖于esp工作。call指令把它后面的指令地址保存到esp指向的内存单元,同时修改eip。如call0x2...
教你打开线程、进程和协程的大门!
让每个用户态线程分配一个单独的内核态线程,每个用户态线程通过系统调用创建一个绑定的内核线程,这种模型能够并发执行,充分利用多核的优势,出名的WindowsNT即采用这种模型,但是如果线程比较多,对内核的压力就太大用户态线程与内核态线程一对一用户态和内核态映射之三--多对多即n个用户态线程对应m个内核...
四两拨千斤:Ubuntu kernel eBPF 0day分析
笔者在Ubuntu14.04上提权成功:这种攻击方式和传统的内存破坏型漏洞不同,不需要做复杂的内存布局,只需要修改用户态传入的数据,就可以达到控制程序指令流的目的,利用的是原有程序的正常功能,会完全绕过现有的各种内存防御机制(SMEP/SMAP等),有一种四两拨千斤的效果。这也是这两年流行的Data-OrientedAttacks,在linux...