23、C语言高级特性与安全问题解析

C语言高级特性与安全问题解析

1. 非局部跳转 - setjmp和longjmp

在C语言中,标准库提供了一种特殊的机制来实现非局部跳转,即 setjmp longjmp 函数。这种机制允许我们存储计算上下文并在需要时恢复它。不过,需要注意的是,存储的上下文并不包含与外部世界相关的内容(如打开的文件描述符)、浮点计算上下文以及栈变量。

要使用这一机制,需要包含 <setjmp.h> 头文件,其中涉及以下几个关键元素:
- jmp_buf :这是一种用于存储上下文的变量类型。
- int setjmp(jmp_buf env) :该函数接受一个 jmp_buf 实例,并将当前上下文存储在其中。默认情况下,它返回0。
- void longjmp(jmp_buf env, int val) :用于返回到存储在 jmp_buf 类型变量中的已保存上下文。当从 longjmp 返回时, setjmp 返回的不是0,而是传递给 longjmp val 值。

下面是一个示例代码:

#include <stdio.h>
#include <setjmp.h>
int main(void) {
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值