#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 |
