⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 longjmp.c

📁 一个类linux的dos下开发的操作系统.
💻 C
字号:
#include <setjmp.h> /* jmp_buf */
/*****************************************************************************
*****************************************************************************/
__inline__ void longjmp(jmp_buf buf, int ret_val)
{
	unsigned *esp2;

/* make sure return value is not 0 */
	if(ret_val == 0)
		ret_val++;
/* store it in buf->eax */
	buf->eax = ret_val;
/* get ESP for new stack */
	esp2 = (unsigned *)buf->esp2;
/* push return EIP on new stack */
	esp2--;
	*esp2 = buf->eip;
/* update stored ESP */
	buf->esp2 = (unsigned)esp2;
/* make buf the stack */
	__asm__ __volatile__("movl %0,%%esp\n"
/* pop GP registers */
		"popa\n"
/* pop ESP for new stack */
		"pop %%esp\n"
/* return */
		"ret\n"
		:
		: "m"(buf));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -