问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

longjmp和siglongjmp的区别

发布网友 发布时间:2022-06-01 20:00

我来回答

1个回答

热心网友 时间:2023-10-14 14:31

Linux的异常处理
基于setjmp和longjmp的运行控制方式是Linux平台上C语言处理异常的标准方案,已被广泛运用到由C语言开发的软件系统和链接库中,例如jpg解析库,加密解密库等等。setjmp和longjmp是以C语言标准库函数的形式提供的,setjmp函数能够保存程序当前的执行环境,即程序的状态,该被保存的程序状态可以在随后程序执行的某一点被longjmp函数恢复,程序的控制流也将跳转到调用setjmp时的执行点,实现非本地局部跳转("non-local goto")的机制。
问题描述:
在编写基于异常的代码混淆程序时,signal注册的异常信号处理程序只能执行一次,第二次发生异常时异常处理函数没有被调用。
分析:
1. 搞清楚Linux的信号处理流程:
[1] 收到信号,例如SIGFPE
[2] 进入signal注册的信号处理函数,此时,SIGFPE自动被加入到进程信号屏蔽字
[3] 执行信号处理函数
[4] 信号处理结束,恢复信号屏蔽字,SIGFPE被取消阻塞
[5] 返回到产生信号地方继续执行
2. 分析异常处理函数没有被调用的原因:
异常信号处理函数在结束前没有取消对SIGFPE信号的阻塞,直接调用longjmp()进行控制流转移。所以在后面的执行过程中再次遇到SIGFPE信号,系统会自动根据 信号屏蔽字进行屏蔽,异常处理函数也就无法被调用。
3. 该问题的解决办法:
使用sigsetjmp和siglongjmp函数替换setjmp和longjmp函数。siglongjmp功能与longjmp类似,不同的是siglongjmp会自动恢复进程的信号屏蔽字,因此相同的异常信号再次发生时就不会被系统屏蔽了。
进入信号处理函数,是不是会自动把进入信号

使用sigsetjmp和siglongjmp函数替换setjmp和longjmp函数。siglongjmp功能与longjmp类似,不同的是siglongjmp会自动恢复进程的信号屏蔽字,因此相同的异常信号再次发生时就不会被系统屏蔽了。

proximity ligation assay 原理是什么?

Duolink PLA技术可通过同一个实验即可完成对蛋白质互作及其修饰的检测、定量以及确定细胞定位等。Duolink基于原位PLA技术(即邻位连接分析技术),可以帮助您在内源蛋白质表达过程中进行该分析。

LLM部署(1) | 检测CPU支持的指令集架构特性

它在不同平台下有两份实现,分别针对Windows和*nix系统。在*nix系统中,使用setjmp/longjmp处理SIGILL异常。当SIGILL发生时,若CPU支持该指令,则继续执行代码,取消异常处理;否则,通过siglongjmp返回原始状态,判断不支持指令。

Linux C函数实例速查手册的目录

5.17 longjmp函数:跳到原先setjmp存储的堆栈环境5.18 on_exit函数:设置程序正常结束前调用的函数5.19 setjmp函数:存储当前堆栈环境5.20 setgid函数:设置进程的进程组ID5.21 setuid函数:设置进程组ID5.22 setpriority函数:设置程序进程优先级5.23 siglongjmp函数:跳到原先sigset jmp存储的堆栈环境5.24 sigsetjmp函数:存储当前堆...

usleep函数的注意事项

如果信号捕捉功能的中断usleep()检查或变化的时间sigalrm将产生,与sigalrm信号相关的动作,或是否sigalrm信号被阻止从交货,结果是不确定的。如果信号捕捉功能的中断usleep()和电话siglongjmp(

setjmp和longjmp ⊂和⊆的区别 及和合的区别 其他和其它的区别 与和于的区别 即和即的区别 longjmp longjmp函数 那跟哪的区别
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
淘宝买家差评删除流程是什么?具体步骤介绍 神拳李青多少钱 《英雄联盟》盲僧新皮肤睁眼介绍_《英雄联盟》盲僧新皮肤睁眼是什么_百 ... 至高之拳李青高清壁纸至高之拳李青 盲僧金虾皮肤致敬哥哥张国荣 新版皮肤爱的初体验 英雄联盟盲僧神龙尊者皮肤一览 QQ输入法手机版如何进入输入法设置菜单 福来者福往爱出者爱返是什么意思 电脑开机后鼠标自动移动 速度还非常快 为什么总有一大堆验证码发到我手机上。 为什么每个人都会有梦? 什么是索赔? 斗战神灵猴幻甲属性|灵猴幻甲属性 北京雾霾天很严重,你会怎么防护? 斗战神命格怎么升级|幻甲属性选择 斗战神灵猴幻甲属性 斗战神幻甲怎么加属性|幻甲怎么加属性 斗战神电罗刹幻甲属性 斗战神幻甲单件属性| 猴子 灵兽 斗战神代练装备|幻甲属性选择 斗战神异界玄兵武器幻甲 什么属性 斗战神神将幻甲属性|神将幻甲属性 斗战神幻甲属性选择|幻甲属性选择 斗战神 幻甲 属性 斗战神牛魔新年幻甲属性值吗 老手支招 斗战神龙女幻甲属性如何选择 水煮活鱼怎么煮才会味道棒了? 魅蓝note2怎么隐藏桌面图标 魅蓝note2怎么把微信图标隐藏 重庆水煮鱼怎么做我要很正宗的谢谢! 手写签名打印不出来 现有失去标签的氯化镁、碳酸钠、硫酸、氢氧化钡四种无色溶液,为了确定四种溶液各是什么,将它们随意编号 鉴别稀盐酸,稀硫酸,氢氧化钡,碳酸钠和氯化钠溶液将其随意编号为ABCDE后进行试验。 实验室有失去标签的碳酸钾、盐酸、氢氧化钡三瓶无色溶液,为了鉴别它们,现将其任意编号为A、B、C,分别 关于必须用危险品车运输的化学原材料 现有稀盐酸、稀硫酸、氢氧化钡、碳酸钠4瓶失去标签的溶液, 分别编号为A、B、C、D。每次取少量溶液两两混 现有稀盐酸、稀硫酸、氢氧化钡、碳酸钠4瓶失去标签的溶液,分别编号为A、B、C、D.每次取少量溶液两两混 三瓶失去标签的无色溶液分别是稀盐酸、碳酸钠溶液、氢氧化钡溶液,某同学将其任意编号为A、B、C,且各取 为什么要避免使用goto和break语句? signal函数设置的信号怎么退出不了 你未来的另一半会是怎么样的? linux下c语言的setjmp()与alarm() 试剂的序列号 结婚真的可以没有爱情吗? 氢氧化钡,硫酸钠,硝酸 不用试剂怎么鉴别 将下列两组中的两种反应物混合,回答下列问题:(1)根据实验事实完成下表(没有发生反应的,化学方程式 婚姻中可以没有爱情吗 如果婚姻里没有爱情,可以吗? 塔罗牌 什么时候会有另一半 抽到恋人正位 世界上真的有爱情吗?婚姻难道真的可以没有爱情吗?