jmp.cpp
863 字节
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
# see: https://github.com/simple-rtmp-server/srs/wiki/v1_CN_SrsLinuxArm
arm-linux-gnueabi-g++ -o jmp jmp.cpp -static
arm-linux-gnueabi-strip jmp
*/
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
jmp_buf env_func1, env_func2;
int sum = 0;
void func1() {
int ret = setjmp(env_func1);
printf("setjmp func1 ret=%d\n", ret);
if (sum <= 0) {
return;
}
if (sum++ > 1000) {
return;
}
// jmp to func2
longjmp(env_func2, 3);
}
void func2() {
int ret = setjmp(env_func2);
printf("setjmp func2 ret=%d\n", ret);
if (sum <= 0) {
return;
}
// jmp to func1
longjmp(env_func1, 2);
}
int main(int argc, char** argv) {
printf("hello, setjmp/longjmp!\n");
func1();
sum++;
func2();
printf("jmp finished, sum=%d\n", sum);
return 0;
}