longjmp

    6热度

    1回答

    我正在浏览各种setjmp和longjmp实现的源代码,并注意到并非所有CPU寄存器都保存在jmp_buf结构中。在回顾AMD64 ABI后,我注意到只有被保存的寄存器被保存。 我不明白当只有一些寄存器被保存时如何完全恢复功能状态。肯定的是,未保存的寄存器必须一遍又一遍地被破坏,直到我稍后致电longjmp? 然而,一切都很完美,所以肯定有一些我不明白的东西。我希望有人能够对此有所了解。 谢谢!

    3热度

    1回答

    在jpeglib中,必须使用setjmp/longjmp来实现自定义错误处理。 有很多资源,在那里说的setjmp/longjmp的不C均扮演好++(在this question告诉他们有RAII走例子答案),但答案this question说,析构函数被调用。 我有这样的例子(从here取出并修改了一下): #include <iostream> #include <csetjmp> st

    0热度

    1回答

    64位Windows程序中的某些种类的事件,例如如果你通过一个保护页检测到它,那么除零,空指针引用,堆栈溢出通常被处理(在一个程序中发现它是处理它们所必需的),并带有结构化或向量化的异常。 在JIT编译器的上下文中,由于需要提供展开信息并符合所有函数的展开协议,因此结构化例外稍微有些尴尬,因为这些协议可能与例如一个复制垃圾回收器,用于移动代码块,这表明使用了向量异常。 虽然向量化异常处理程序通常需

    0热度

    1回答

    我试图使用setjmp/longjmp错误处理,但是,调用longjmp导致程序退出时使用MSVC 2010编译代码0,在这里是完整的邮件: The program '[5020] test.exe: Native' has exited with code 0 (0x0). 这里是代码: #include <setjmp.h> #include <stdio.h> int main(v

    2热度

    1回答

    为了模拟包含静态变量初始化的应用程序(GNU C版本4.1.2(arm-linux-gnueabi))的完全重新启动,我尝试根据请求将setjmp/longjmp设置为gcc pre_init挂钩函数。 longjmp实际上可以达到.preinit_array函数,但是随后通过SIGSEGV执行崩溃。 任何想法,为什么这可能出错?这通常应该可能吗?在gdbserver的控制下,是否有其他方法将Li

    0热度

    1回答

    来自buflab of CSAPP的问题。我被要求输入一段足以破坏堆栈的漏洞代码。在阶段2中,我需要首先更改名为global_value的全局变量的值,然后调用名为bang的函数。然而,只有当我将爆炸地址放入堆栈然后返回时才有效。 #codes before set the value of global_value movl $0x12345678,%eax /* 0x12345678 i

    1热度

    2回答

    我刚刚开始阅读关于使用setjmp(jmp_buf)和longjmp(jmp_buf,int)在c中进行异常处理的this article。所以我基本上构建了使用xRecord类型的局部变量并将其链接到列表的链接列表。 (例2)它工作得很好。但在示例3中,这些步骤汇总为宏(XTRY和XEND)。什么最让我恼火的是,例如2的实际switch语句只是在3, “消失” 例2: #define DIVID

    3热度

    1回答

    C参考手册,附录B描述了两种功能setjmp和longjmp对于称为的非本地跳转。除了基本的理解,setjmp保存状态信息和longjmp恢复state,我一直无法理解此功能的确切流程和用例。 那么,这个功能究竟做了什么,它在哪里有用呢?

    2热度

    1回答

    问题是 - 我必须用setjmp和longjmp实现我自己的退出(状态)。也许有人可以提供一些指针?

    0热度

    3回答

    我正在使用非本地跳转(setjmp,longjmp)。我想知道这是否会成为演出的问题。 setjmp保存所有的堆栈,或只是一些指针? 谢谢。