我想让程序跳转到内存中的特定地址,并从该地址继续执行。 我考虑使用goto,但我没有标签,而只有一个内存地址。
goto
不需要担心从跳转地址返回。
编辑:使用GCC编译器。
gcc有一个扩展,允许跳转到任意地址:
void *ptr = (void *)0x1234567; // a random memory address goto *ptr; // jump there -- probably crash
这几乎与使用设置为固定值的函数指针相同,但实际上将使用跳转指令而不是调用指令(因此堆栈不会被修改)
使用内联汇编可能是最简单且最“优雅”的解决方案,尽管这样做非常罕见,除非你正在编写调试器或一些专门的自省系统。
另一个选项可能是声明一个指向void函数的指针 (void (*foo)(void)),然后将指针设置为包含你的地址,然后调用它:
void (*foo)(void)
void (*foo)(void) = (void (*)())0x12345678; foo();
编译器会将一些东西压入栈中,因为它认为你正在执行一个子例程调用,但由于你不在意返回,这可能会起作用。
用户名或电子邮箱地址
密码