
在 C 语言中,可以使用函数的返回值来实现从子程序中直接跳转到其他地方。
例如,您可以在 R_NEED_MAN_DO 子函数中添加一个 if 语句,判断 PLC_GI0 的值是否为 88,如果是,则返回一个特定的值,用于指示在主函数中跳转到其他位置。您可以使用 return 语句来实现这一点。示例代码如下:
int R_NEED_MAN_DO() {
// do something
if (PLC_GI0 == 88) {
return 1;
}
// do something else
}
然后,在您的主函数中,可以根据 R_NEED_MAN_DO 的返回值来实现跳转。例如,如果返回值为 1,则可以使用 goto 语句跳转到指定的位置。示例代码如下:
int main() {
// do something
int result = R_NEED_MAN_DO();
if (result == 1) {
goto my_label;
}
// do something else
my_label:
// do something after jump
}
请注意,在大多数情况下,使用 goto 语句来实现跳转是不推荐的,因为它会导致代码难以维护和理解。在实际编写代码时,应尽量避免使用 goto 语句,并尝试使用其他结构来控制程序流程。
看你的执行顺序应该是分别执行两个 c 文件。就是两个独立的进程。每个进程有相互独立的虚拟地址空间。你所得到的40059c是另一个进程的函数地址。 在exploit中的40059这个地址是非法使用的。要想在一个进程中使用另一个进程的函数,就必须要用进程间通信。如共享内存,注册函数,共用此函数。
看你的意图是想要在一个文件中利用函数指针调用别的文件中的函数。如果说你只是想要熟悉一下函数指针,那么这种方法是不可取的。因为函数在定义是并不分配存储空间,在调用的时候在栈中分配存储空间,返回时释放。
要想用数值强转成函数地址。这个函数的地址就必须不能改变。那么就需要将函数声明为静态函数。这样麻烦又来了,静态函数是文件内部使用,外部不能引用。所以,你这种做法是不可取的。
有一种简单的方法是在你想停住的地方加一句getchar(),这样运行到这里的时候你在键盘上按任意键才会继续运行后面的代码。不过这种方法来暂停就必须要按键继续,如果你是想暂停一定的时间,就要用ls说的sleep的方法。
以上就是关于C语言,怎么实现从子程序中直接跳转到其他地方全部的内容,包括:C语言,怎么实现从子程序中直接跳转到其他地方、如何用c语言在自己程序中执行另一个程序中(假如不是自己的)的函数、C语言中如何控制程序暂停等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)