#include <stdio.h> #include <stdlib.h> #include <ucontext.h> #define MEM 64000 ucontext_t T1, T2, Main; ucontext_t a; int fn1() { printf("this is from 1\n"); setcontext(&Main); } void fn2() { printf("this is from 2\n"); setcontext(&a); printf("finished 1\n"); } void start() { getcontext(&a); a.uc_link=0; a.uc_stack.ss_sp=malloc(MEM); a.uc_stack.ss_size=MEM; a.uc_stack.ss_flags=0; makecontext(&a, (void*)&fn1, 0); } int main(int argc, char *argv[]) { start(); getcontext(&Main); getcontext(&T1); T1.uc_link=0; T1.uc_stack.ss_sp=malloc(MEM); T1.uc_stack.ss_size=MEM; makecontext(&T1, (void*)&fn1, 0); swapcontext(&Main, &T1); getcontext(&T2); T2.uc_link=0; T2.uc_stack.ss_sp=malloc(MEM); T2.uc_stack.ss_size=MEM; T2.uc_stack.ss_flags=0; makecontext(&T2, (void*)&fn2, 0); swapcontext(&Main, &T2); printf("completed\n"); exit(0); }
[결과]
flack3r@ubuntu:/mnt/hgfs/Ctf$ ./test
this is from 1
this is from 2
this is from 1
completed
참조:http://stackoverflow.com/questions/21468529/context-switching-ucontext-t-and-makecontext
'memo' 카테고리의 다른 글
문자열 함수들 특징 (0) | 2015.03.22 |
---|---|
strcpy에 대한 팁.! (0) | 2015.03.10 |
qemu를 이용한 arm system 설치 (1) | 2014.12.26 |