小编occ*_*cia的帖子

与gcc相比,为什么clang在寄存器变量中表现怪异?

背景:

我需要在C代码中获取寄存器值,因此我在gcc用法中发现了这一点。我使用以下代码获得ebp值。

   register int ebp asm("ebp");
   printf("currently ebp is %08x\n", ebp);
   // then some code use the value
Run Code Online (Sandbox Code Playgroud)

一切正常,直到我将程序的编译器更改为clang为止。在gcc中,它通常会打印类似于0x7f1284978的内容,绝对是类似value的指针。

但是当使用clang时,输出变得很奇怪,它打印出一个0x9之类的值。Ebp不能具有这样的值。

问:

  • clang不支持此寄存器变量用法吗?
  • 如果它不支持此功能,为什么不抱怨警告或错误(使用以下代码进行编译)?

    #include <stdio.h>
    
    static size_t vfp = 0x233;
    
    int main(void) {
        register int ebp asm("ebp");
        vfp = (size_t) ebp;
        printf("vfp value is 0x%lx\n", vfp);
        return 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)

c assembly clang

5
推荐指数
1
解决办法
204
查看次数

标签 统计

assembly ×1

c ×1

clang ×1