如何在x86程序集中将当前线程的堆栈指针更改为新线程

时间:2014-03-01 13:39:00

标签: c++ c multithreading assembly x86

我正在尝试创建用户级线程库。我有一个叫做的函数 在void switch_thread(tcb* currSp,tcb* newSp)中实现的tcb* currSptcb* newSp是当前线程和新线程的堆栈指针。 switch_thread函数应该在x86程序集中实现。 我的问题是如何在x86程序集中将堆栈指针当前线程更改为新线程。

    .text
    .global switch_thread
   switch_thread:
        mov 0x4(%esp), %eax #current thread
        mov 0x8(%esp), %ecx #new thread
            //no idea how to implement rest of it.

1 个答案:

答案 0 :(得分:3)

<ucontext.h>中的功能正是如此,setcontext()就是你想要的。此功能在GLIBC中实现,the source file for it可以在互联网上的各个位置找到。

随便查看程序集,它基本上恢复浮点上下文,然后恢复所有其他寄存器。