我正在尝试在程序集中实现绿色线程/进程。
例如,我得到了这个带有两个循环的 x64 汇编代码(nasm 语法)。它输出很多'a',但我希望它输出'a's和'b's。这当然不是一个真实的例子,因为只需将两个循环结合起来就可以解决问题。
global main
extern printf
section .text
main:
.t1:
mov eax, 0
mov rdi, a
call printf
jmp .t1
.t2:
mov eax, 0
mov rdi, b
call printf
jmp .t2
section .data
a: db "a", 0
b: db "b", 0
因此,我想编写某种调度程序,将指令指针更改为main.t1
或main.t2
每隔几微秒,同时保存一些寄存器并更改堆栈指针。
我知道如果这在用户空间是不可能的,那么进程似乎不太可能改变正在运行的程序,因为这会引入一些安全漏洞。如果不能从用户空间完成,是否可以使用内核模块?