目录

What Kinds of C Statements End Up in Which Segments

How the Segments of an Executable are Laid Out in Memory

Virtual Address Space Layout, Showing Shared Libraries

An Activation Record is Created at Runtime for Each Function Call

The following code shows an example of setjmp() and longjmp().

Jump to It!


What Kinds of C Statements End Up in Which Segments

How the Segments of an Executable are Laid Out in Memory

Virtual Address Space Layout, Showing Shared Libraries

An Activation Record is Created at Runtime for Each Function Call

The following code shows an example of setjmp() and longjmp().

#include <setjmp.h>
jmp_buf buf;
#include <setjmp.h>
banana() {printf("in banana()\n");longjmp(buf, 1);/*NOTREACHED*/printf("you'll never see this, because I longjmp'd");
}
main()
{if (setjmp(buf))printf("back in main\n");else {printf("first time through\n");banana();}
}

结果:

% a.out
first time through
in banana()
back in main

或者一种牛叉的方法:

switch(setjmp(jbuf))
{case 0:apple = *suspicious;break;case 1:printf("suspicious is indeed a bad pointer\n");break;default:die("unexpected value returned by setjmp");
}

Jump to It!

Take the source of a program you have already written and add setjmp/longjmp to it, so that on receiving some particular input it will start over again.

The header file <setjmp.h> needs to be included in any source file that uses setjmp or longjmp.

Like goto's, setjmp/longjmp can make it hard to understand and debug a program. They are best avoided except in the specific situations described.

segment段,setjmp和longjmp相关推荐

  1. Linux学习之setjmp和longjmp函数

    nsetjmp和longjmp函数实现函数之间的跳转(需包含头文件"setjmp.h"): 函数原型:int setjmp(jmp_buf env);   void longjmp ...

  2. setjmp()、longjmp() Linux Exception Handling/Error Handling、no-local goto

    目录 1. 应用场景 2. Use Case Code Analysis 3. 和setjmp.longjmp有关的glibc and eglibc 2.5, 2.7, 2.13 - Buffer O ...

  3. 【转】浅析C语言的非局部跳转:setjmp和longjmp

    转自 http://www.cnblogs.com/lienhua34/archive/2012/04/22/2464859.html C语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转 ...

  4. 利用C语言中的setjmp和longjmp,来实现异常捕获和协程

    一.前言 二.函数语法介绍 与 goto 语句比较 与 fork 函数比较 与 Python 语言中的 yield/resume 比较 三.利用 setjmp/longjmp 实现异常捕获 四.利用 ...

  5. linux C下的setjmp与longjmp介绍

    setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理. 先来看一下这两个函数的定义 ...

  6. setjmp 与 longjmp

    setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理. 先来看一下这两个函数的定义 ...

  7. setjmp and longjmp

    setjmp, sigsetjmp - save stack context for nonlocal goto 1.作用 C中我们不能goto一个其他函数离得label,我们必须使用setjmp和l ...

  8. 浅析C语言的非局部跳转:setjmp和longjmp

    浅析C语言的非局部跳转:setjmp和longjmp 作者:李恩华  写于2012.4.22日凌晨西甲国家德比之前 C语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转(通常情况下,很多人 ...

  9. 递归和函数栈与setjmp和longjmp的关系

    递归每执行一次都会释放一次函数栈 setjmp 记录函数栈的栈顶 longjmp 寻找函数栈的栈顶 如果longjmp找到了他要寻找的函数栈顶 调用setjmp的函数栈不会被释放 所以setjmp 和 ...

最新文章

  1. 小程序循环不同的组建_小程序之八,对象数组、循环及条件渲染
  2. 表单提交enctype参数详解之:application/x-www-form-urlencode和multipart/form-data
  3. Shell 脚本中如何使用make命令
  4. 【转】Zookeeper 安装和配置
  5. 图论 —— 弦图 —— LexBFS 算法
  6. 每次请求刷新token的时间
  7. 为什么抢不到红包的总是你?可能是家里路由器没放对
  8. 中兴zxr10路由器重启命令_zxr10维护常用命令
  9. 微信小程序---wxss模板样式
  10. 手机wifi java_Android中使用WIFI来连接ADB
  11. 揭开姓氏的秘密|为什么最古老的八个姓氏都是女字旁?
  12. 简单剖析B树(B-Tree)与B+树
  13. Power BI 中的货币换算
  14. Linux 只查找两层备份目录文件大小
  15. JIRA 6.3.6 详细安装图解
  16. STM32SPI通信原理
  17. 英文邮件模板--向论文作者索要源代码(write an email requesting for code)
  18. 【STM32学习笔记】(13)——外部中断详解
  19. pythonweb全栈开发_Python web全栈学习路线
  20. 叶子结点和分支节点_结点数和叶子结点数有什么区别

热门文章

  1. 程序设计与算法----递归之神奇的口袋
  2. CNN反向传播算法过程
  3. layer 弹出层 回调函数调用 弹出层页面 函数
  4. 一、SMARTY安装于配置文件
  5. jQuery框架总体分析
  6. ASP.NET AJAX1.0尝鲜试用:Web Service调用
  7. 创建Session时会把含有Session ID 的Cookie对象加到响应对象上
  8. android 判断服务是否正在运行,Android 判断某个服务(service)是否运行
  9. java bufferedwriter会自动创建文件吗_Java中为什么会有包装类?自动拆装箱必要吗?关于Wrapping Class这是重点!...
  10. android 支付宝月账单 统计图_支付宝年度账单也太敷衍了!