4

极简的swapcontext实现

 3 years ago
source link: https://www.zenlife.tk/swapcontext.md
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

极简的swapcontext实现

2015-04-18

context.h

	#ifndef _CONTEXT_H
	#define _CONTEXT_H	
	
	struct Context {
	    uint64_t rsp;
	    uint64_t r15;
	    uint64_t r14;
	    uint64_t r13;
	    uint64_t r12;
	    uint64_t rbx;
	    uint64_t rbp;
	};
	void SwapContext(struct Context *old, struct Context *new);

context.s

	.globl _SwapContext, SwapContext
	_SwapContext:
	SwapContext:
	
	        mov     %rsp, 0x00(%rdi)
	        mov     %r15, 0x08(%rdi)
	        mov     %r14, 0x10(%rdi)
	        mov     %r13, 0x18(%rdi)
	        mov     %r12, 0x20(%rdi)
	        mov     %rbx, 0x28(%rdi)
	        mov     %rbp, 0x30(%rdi)
		
	        mov     0x00(%rsi), %rsp
	        mov     0x08(%rsi), %r15
	        mov     0x10(%rsi), %r14
	        mov     0x18(%rsi), %r13
	        mov     0x20(%rsi), %r12
	        mov     0x28(%rsi), %rbx
	        mov     0x30(%rsi), %rbp
		
	        ret

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK