弗远

2011年12月8日

setjmp在非主函数中调用

摘要: 一个进程的正常结束方式应当是从main函数调用exit返回(一般情况下),若是进程在main函数中调用longjmp进入了其他函数会发生什么情况呢? 程序的逻辑布局一般包括代码段、数据段、栈、堆...代码段是程序的指令集合。当一个函数被调用的时候,当前执行指令会跳转到被调用函数所对应代码段。而在跳转之前,会开辟一个该函数的栈帧,函数的返回地址(即当该函数执行完所应返回的地址)以及函数中所有的局部变量都会被保存于此栈,而这所有的动作被执行的前提是该函数显式的被调用。那么回到刚才的问题,在main函数中调用longjmp进入其他函数的时候,该函数不是被显示的调用,所以,该函数没有对应的栈帧,... 阅读全文

posted @ 2011-12-08 00:55 弗远 阅读(221) 评论(0) 推荐(0) 编辑

setjmp与longjmp

摘要: 程序:#include <stdio.h>#include <stdlib.h>#include <setjmp.h>jmp_buf jmpbuf;void test_fun();int main(int argc, char* argv[]){ int a = 0; int flag = false; register int reg = 0; if (setjmp(jmpbuf) != 0) { printf("a:%d reg:%d\n", a, reg); flag = true; printf("error\n&quo 阅读全文

posted @ 2011-12-08 00:25 弗远 阅读(177) 评论(0) 推荐(0) 编辑

导航