- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要确保我首先了解一些基本知识:
现在是重头戏:
我正在尝试按照以下方式做一些事情:
jmp_buf buf;
buf.__jmpbuf[JB_PC] = functionA;
longjmp(buf,10);
意思是我想使用longjmp
来执行一个函数。我应该怎么做?
最佳答案
您需要使用指向函数的指针。声明函数指针的语法是:
rettype (*)(paramtype1,paramtype2,...,paramtypeN)
因此,例如,我们可能有以下代码:
char functionA(int x)
{
printf("%d\n",x):
return 'a';
}
char functionB(char (*f)(int), int val)
{
return f(val); // invokes the function pointer
}
int main(int argc, char* argv[])
{
char result = functionB(&functionA,3); // prints "3"
printf("%c\n",result); // prints 'a'
return 0;
}
另外,附带说明,虽然 &functionA 获取函数 A 的地址,但实际上没有必要在那里使用 & 符号……我个人这样做,因为我认为它更清楚地表明它是一个函数指针.您可以使用与调用函数时相同的语法来调用函数指针。
至于使用跳转缓冲区,我相信你所做的是不可靠的。如果您想在调用某个函数之前创建一个跳转缓冲区并调用 setjmp,然后稍后调用 longjmp 以便您立即返回到调用之前,那么这是明确定义的。不过,jmp_buf 的实际定义和结构是特定于实现的。它必须满足某些要求(例如,它必须是数组类型,因为 setjmp 必须能够按值获取并修改它),但除此之外,specification for setjmp.h没有定义jmp_buf的结构。因此,任何试图直接操纵 jmp_buf 的东西都将特定于特定平台。
关于c - 在 C : sending func pointers, 中调用 func,使用 EIP、jmp_buf 和 longjmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2855746/
我正在运行 Ubuntu 9.10 (Karmic Koala),我查看了 jmp_buf 结构,它只是一个包含 12 个整数的数组。当我使用 setjmp 并传入一个 jmp_buf 结构时——12
我正在尝试将单元测试框架 cMockery 添加到我的 C 项目中。我已经将 cMockery 下载并安装到全局包含路径中。但是在#include 之后在我的源文件中,cmake 引发了以下问题。如果
您好,我想问一下 setjmp/longjmp。我试图搜索,但我没有成功...... #include #include jmp_buf a, b; void jump() { int a
我试图将 jmp_buf 定义为指针并在嵌套的 longjmp(s) 中使用它。如下所示: ... jmp_buf *bfj; ... 然后写 if else: if( setjmp(*bfj) =
我需要帮助来利用 jmp_buf 结构上的缓冲区溢出。 我在堆栈上有以下值(由 gdb 看到): 0xbffffc40: 0xb7fd8ff4 0x080485a0 0x0
制作 jmp_buf 的拷贝并在以后恢复它是否可能并且有效?像 jmp_buf oldEnv = env; int val = setjmp(env); ....... env = oldEnv; 我
如前所述,当调用 setjmp(jmp_buf env) 时,x86-64 处理器上的 jmp_buf 中需要输入哪些软件可见的处理器状态?什么处理器状态没有? 我已经阅读了很多关于 setjmp 和
setjmp() 应该将包括“返回地址”和“堆栈指针”在内的寄存器保存到“jmp_buf”中。当我使用 glibc 在 x86_64 下编译(gcc 和 clang)和调试以下程序时,我无法理解“jm
我需要确保我首先了解一些基本知识: 如何将函数 A 作为参数传递给函数 B? 如何从 B 内部调用函数 A? 现在是重头戏: 我正在尝试按照以下方式做一些事情: jmp_buf buf; buf.__
我是一名优秀的程序员,十分优秀!