【问题标题】:C instruction addressC指令地址
【发布时间】:2010-05-30 21:41:12
【问题描述】:

免责声明,关于这个问题我没有做任何特别的事情,只是好奇。

是否可以在 C 中获取指令或块的地址?本质上,C 中是否存在等价的跳转?

例如:

void function() {
    int k;
    { // is a possible to go to this address from arbitrary point in code?
      int i, j;
      k += j+i;
    }
}

谢谢

【问题讨论】:

  • @James 不,我刚刚阅读了关于闭包的文章并认为(仅作为练习)是否可以在 C 中做到这一点。所以没有特定的平台

标签: c memory


【解决方案1】:

我认为您可以使用标准技术最接近的是setjmplongjump。但它们不会让您访问实际地址,因为 jmp_buf 对象是不透明的。

【讨论】:

    【解决方案2】:

    是的,使用goto

    void function() {
        int k;
        { // is a possible to go to this address from arbitrary point in code?
    myLabel:
          int i, j;
          k += j+i;
        }
    
    // stuff
    
        goto myLabel;
    }
    

    【讨论】:

    • 但是 go to 是作用域的?还是不是?
    • Goto 没有获取地址。也许您将标签视为值,即 GCC 扩展? gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
    • “代码中的任意点” - 我没有意识到你的意思是你程序中的字面意思 anywhere。是的,goto 仅用于函数内部。对于代码中的任何地方,是的,setjmp/longjump 是你的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多