C++ Fiber 纤程 实现 Shellcode Loader

C++ Fiber 纤程 实现 Shellcode Loader - 侠者安全社区
C++ Fiber 纤程 实现 Shellcode Loader
此内容为付费阅读,请付费后查看
会员专属资源
您暂无购买权限,请先开通会员
开通会员
付费阅读

0x0 基础知识

00 原理

  • 纤程(Fiber)是一种最轻量化的线程(lightweight threads)。它是一种用户线程(user thread),让应用程序可以独立决定自己的线程要如何运作。操作系统内核不能看见它,也不会为它进行调度。
  • 就像一般的线程,纤程有自己的寻址空间。但是纤程采取合作式多任务(Cooperative multitasking),而线程采取先占式多任务(Pre-emptive multitasking)。
  • 应用程序可以在一个线程环境中创建多个纤程,然后手动运行它。纤程不会被自动运行,必须要由应用程序自已指定让它运行,或换到下一个纤程。
比较线程(Thread)纤程(Fiber)
实现方式是个内核对象在用户模式中实现的一种轻量级的线程,是比线程更小的调度单位。
调度方式由Microsoft定义的算法来调度,操作系统对线程了如指掌。内核对线程的调度是抢占式的。由我们自己调用SwitchToFiber来调度,内核对纤程一无所知。线程一次只能执行一个纤程代码,纤程间的调度不是抢占式的。
备注一个线程可以包含一个或多个纤程。操作系统随时可能夺走纤程所在线程的运行。当线程被调度时,当前被选择的纤程得以运行,而其他纤程无法运行,因为同一个线程中,每次只能有一个纤程正在运行,除非调用SwitchToFiber才能切换到另一个纤程去执行。与SwitchToThread不同,SwitchToFiber会立即切换到另一个纤程去执行(如果该线程的CPU时间还有剩余的话),而SwitchToThread要等CPU来调度另一个线程。②纤程与线程一样,也有自己的寄存器环境与函数调用栈

01 文档

convertThreadToFiber 函数 (winbase.h) – Win32 apps | Microsoft Learn

createFiber 函数 (winbase.h) – Win32 apps | Microsoft Learn

switchToFiber 函数 (winbase.h) – Win32 apps | Microsoft Learn

deleteFiber 函数 (winbase.h) – Win32 apps | Microsoft Learn

0x1 实现代码

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情

    暂无评论内容