首页 > 其他分享 >C语言设置安全长跳转(setjmp/longjmp)

C语言设置安全长跳转(setjmp/longjmp)

时间:2024-11-12 09:46:29浏览次数:1  
标签:__ longjmp stdout void setjmp fprintf func 跳转

#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>

static jmp_buf env;

void d(void)
{
  fprintf(stdout,"%s\n",__func__);
  fprintf(stdout,"d end\n");
  longjmp(env, 10);    //跳转到设置点
}

void c(void)
{
  fprintf(stdout,"%s\n",__func__);
  fprintf(stdout,"c begin\n");
  d();
  fprintf(stdout,"c end\n");
}

void b(void)
{
  fprintf(stdout,"%s\n",__func__);
  fprintf(stdout,"b begin\n");
  c();
  fprintf(stdout,"b end\n");
}

void a(void)
{
  int ret;
  ret = setjmp(env);  //设置跳转点
  if(ret ==0)      //跳转前执行函数
  {
    fprintf(stdout, "setjmp ok\n");
    fprintf(stdout,"%s\n",__func__);
    fprintf(stdout,"a begin\n");
    b();
    fprintf(stdout,"a end\n");
  }
  else if(ret !=0)  //跳转后执行函数
  {
    fprintf(stdout, "val:%d\n", ret);
  }
}

int main()
{
  fprintf(stdout,"%s\n",__func__);
  fprintf(stdout,"main begin\n");
  a();
  fprintf(stdout,"main end\n");

  exit(0);
}  

 

标签:__,longjmp,stdout,void,setjmp,fprintf,func,跳转
From: https://www.cnblogs.com/linux-learn/p/18541151

相关文章

  • linux中使用cd指令跳转路径时带不带“/”
    在Linux中使用`cd`命令跳转目录时,是否需要`/`取决于路径的类型。以下是规则:1.**绝对路径:以`/`开头**-如果路径以`/`开头,表示从根目录开始的**绝对路径**。-使用绝对路径可以精确定位到文件系统中的某个目录,不受当前目录影响。-例如:```bashcd/......
  • 内核源码+vscode+bear+clang实现函数任意跳转,无缝跳转,无缝阅读,无缝开发
    一、准备工作1、内核源码版本选择务必有一份能编译通过的《内核源码》,本次选择5.10版本的。#说明:5.10版本的《内核源码》里,在scripts/clang-tools目录下有《gen_compile_commands.py》文件,这个脚本也能生成《compile_commands.json》文件。已确定4.19版本没有,请尽量选择高版......
  • 解决pbootcms伪静态链接带参数跳转404错误页面
    检查PbootCMS后台设置检查是否有自定义的伪静态规则,确保这些规则没有冲突。检查URL参数处理如果你的链接带有参数,确保这些参数在PbootCMS中被正确处理。有时候,某些参数可能需要特殊处理或过滤。在PbootCMS的控制器或模型中,检查是否对URL参数进行了适当的处理和验证。......
  • redirect跳转https变为http问题的深入思考【转】
    背景服务部署以及跳转展示如下: 用户https请求通过阿里云负载通过http到指定应用,应用返回跳转路径(状态为302),但跳转路径为http(不为https),所以访问不了2.1跳转伪代码://ModelAndViewmv.setViewName(WebCst.REDIRECT+"/admin/sso/login");122.2浏览器跳转截图结论总结用nginx......
  • FPGA实现复杂状态机的跳转-判断标准数据帧
    填补之前的状态机跳转挖的坑;数据源对比标准帧:第一步:ROM当做数据源:使能开启,使用地址addr控制其输出。(使用状态机写入RAM时的控制选用addr)RAM作为标准帧的缓存,使用addr_ram作为RAM的写入地址。此时ROM的地址比RAM的地址延迟了一个节拍;(addr_ram<=addr;)第二步:RAM缓存写满之......
  • 跳转传参及参数获取
    跳转传参我们可以通过两种方式,在跳转的时候把所需要的参数传到其他页面中查询参数传参动态路由传参查询参数传参如何传参?注:①参数的值不用加""②key与=与参数名之间不要加空格!!<router-linkto="/path?参数名=值"></router-link>//有多个参数使用&链接如......
  • 程序流程结构——循环结构||跳转语句
    一、循环结构(一)while循环语句作用:满足循环条件,执行循环语句语法:while(循环条件){循环语句};解释:只要循环条件为真,就执行循环语句例:当我们想要输入0~9这串连续的数字时,我们先创建初始数值为0,利用while循环输出数字,循环条件写在括号中,我们输入的数字为0~9,故(num<10),num++=nu......
  • xshell-ssh自动多级跳转功能介绍
    xshell-ssh自动多级跳转功能介绍使用xshell在登陆到服务器时,可以配置需要自动执行的命令。最常用的是,我们可以使用此特性完成ssh自动多级跳转。通常,现网生产环境是和不能通过公网直接登陆,需要先登陆到跳板机然后二次登陆。xshell-ssh自动多级跳配置步骤下面以韶山项目的一组......
  • swiftui之页面跳转数据连接
    importSwiftUIstructDesignCode:View{@Statevarshow=false@StatevarviewState=CGSize.zerovarbody:someView{ZStack{TitleView().blur(radius:show?20:0)......
  • 鸿蒙Navigation处理启动页跳转到首页问题
    在使用Navigation时时,你是否遇到了这样一个问题,Navigation加载启动页为入口,在启动页replace到首页,使首页替换换启动页,结果发现不生效,启动页依然存在。为什么根页面启动页不能直接替换成首页我们验证后发现当页面是Navigation的子页面时,是可以使用replace替换,当要替换根页面时,却......