使用LLVM工具链编译、组装和拆解

使用LLVM工具链编译、组装和拆解,llvm,Llvm,我尝试运行以下程序,使用LLVM工具链编译、组装和反汇编一个小程序 我的目的是了解它是如何工作的,以便在进一步的尝试中,我可以通过更改和/或重新排列assmbly的指令来进行一些性能测试 首先,我首先得到一个虚拟程序的bite代码: % llvm-gcc -O3 -emit-llvm hello.c -c -o hello.bc 获得bite代码后,我尝试使用llvm dis实用程序查看llvm程序集代码,并使用llc代码生成器将程序编译回本机程序集(仅供尝试): 有什么办法解决这个问

我尝试运行以下程序,使用LLVM工具链编译、组装和反汇编一个小程序

我的目的是了解它是如何工作的,以便在进一步的尝试中,我可以通过更改和/或重新排列assmbly的指令来进行一些性能测试

首先,我首先得到一个虚拟程序的bite代码:

    % llvm-gcc -O3 -emit-llvm hello.c -c -o hello.bc
获得bite代码后,我尝试使用llvm dis实用程序查看llvm程序集代码,并使用llc代码生成器将程序编译回本机程序集(仅供尝试):

有什么办法解决这个问题吗

我在谷歌上搜索过,还没有找到解决办法。我也尝试过使用

    otool -tV hello
但输出与llvm不兼容。而不是获取以下程序集格式:

.section    __TEXT,__text,regular,pure_instructions
.globl  _main
.align  4, 0x90
    _main:
    Leh_func_begin1:
pushq   %rbp
    Ltmp0:
movq    %rsp, %rbp
    Ltmp1:
subq    $16, %rsp
    Ltmp2:
leaq    L_.str(%rip), %rax
我得到:

__TEXT,__text) section
start:
0000000100000eb0    pushq   $0x00
0000000100000eb2    movq    %rsp,%rbp
0000000100000eb5    andq    $0xf0,%rsp
0000000100000eb9    movq    0x08(%rbp),%rdi
0000000100000ebd    leaq    0x10(%rbp),%rsi
0000000100000ec1    movl    %edi,%edx
0000000100000ec3    addl    $0x01,%edx
这对我来说是无效的,因为我编译后一个程序集,例如:

    % gcc hello.s -o hello.native

提前感谢。

确保您的llvm gcc版本与您安装的llvm版本匹配-二进制IR格式变化非常快,并且在多个版本之间不向后兼容

或者,您可以尝试从LLVM gcc发出LLVM IR的文本表示,并通过LLVM将其组装为

大概是这样的:

llvm-gcc -emit-llvm -S foo.c -o foo.ll
llvm-as foo.ll -o foo.bc
llc foo.ll -o foo.S

等等。

llvm gcc已被弃用。你能试试叮当声吗?我也有类似的问题。你解决了吗???
    % gcc hello.s -o hello.native
llvm-gcc -emit-llvm -S foo.c -o foo.ll
llvm-as foo.ll -o foo.bc
llc foo.ll -o foo.S