gpt4 book ai didi

c++ - llvm 可以发出跳转到函数内给定地址的代码吗?

转载 作者:太空狗 更新时间:2023-10-29 21:18:46 25 4
gpt4 key购买 nike

跟进 this问题,llvm是否有可能生成可能跳转到同一地址空间中函数内任意地址的代码?即

      void func1() {
...
<code that jumps to addr2>
...
}

void func2() {
...
addr2:
<some code in func2()>
...
}

最佳答案

Yes,No,Yes,No,(yes) - 这取决于您所看到的级别以及您对可能的含义:

  • 是的,因为 llvm 后端将生成目标特定的汇编程序指令和那些汇编指令允许设置一个任意值的程序计数器。
  • 不,因为 - 据我所知 - llvm ir(像 clang 这样的前端编译你的 c 代码的中间表示)没有任何允许在 (llvm-ir) 函数之间任意跳转的指令。
  • 是的,因为前端当然可以生成模拟该行为的代码(将 func2 分解为多个单独的函数)。
  • 不,因为 C 和 C++ 不允许这样跳转到任意位置,所以 clang 不会编译任何试图这样做的程序(例如通过 goto)
  • (是的)c longjmp 宏跳回到控制流中您已经访问过的地方(您调用 setjmp 的地方)但也恢复(大部分)的系统状态。 编辑:但是,如果 func2 不在您跳转的当前调用堆栈中的某个位置,这就是 UB。

关于c++ - llvm 可以发出跳转到函数内给定地址的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29386515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com