c/c++语言开发共享转到C中的特定地址

我如何JMP到C中的特定地址?

我想用

goto 0x10080000 

这是行不通的,还有其他方法可以改变程序计数器的地址吗?

    您可以地址转换为函数指针,然后跳转到:

     ((void (*)(void))0x10008000)(); 

    为了使它更清楚:

     typedef void (*func_t)(void); ... ((func_t)0x10008000)(); 

    但这是一个函数,编译器将发出一个期望返回的分支指令(然后由你来决定你的函数是否返回)。 另请注意,编译器将生成一个代码,该代码期望在给定地址处找到C函数,关于如何给出和返回函数参数。

    如果需要在不返回的情况下发出分支指令,则需要使用内联汇编。

    在GCC中,您可以使用计算goto 。 我自己没有尝试过,但它应该像这样工作:

     void *address = 0x10080000; ... goto *address; 

    内联汇编指令也应该起作用:

    asm("jump 0x10080000");

      以上就是c/c++开发分享转到C中的特定地址相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/545812.html

      (0)
      上一篇 2021年1月10日
      下一篇 2021年1月10日

      精彩推荐