【问题标题】:How to extract the __bitcode/__bundle section from a MachO binary如何从 MachO 二进制文件中提取 __bitcode/__bundle 部分
【发布时间】:2020-08-01 15:07:08
【问题描述】:

对于带有嵌入位码的二进制文件(即,使用-fembed-bitcode 编译)。我如何才能提取该部分,以便我可以像使用任何其他位码文件一样使用该位码文件,例如运行optllvm-dis

作为一个测试用例,我有这个 hello-world 程序:

// hello.cpp
#include<iostream>

int main() {
  std::cout << "hello world";
  return 0;
}

编译为:clang++ -O2 test.cpp -o test.o -fembed-bitcode -c

objdump 显示其中有一个 __bitcode 部分:

objdump -h test.o 

test.o: file format Mach-O 64-bit x86-64

Sections:
Idx Name          Size      Address          Type
  0 __text        000002eb 0000000000000000 TEXT 
  1 __gcc_except_tab 00000068 00000000000002ec DATA 
  2 __cstring     0000000c 0000000000000354 DATA 
  3 __bitcode     00002bc0 0000000000000360 DATA 
  4 __cmdline     00000046 0000000000002f20 DATA 
  5 __compact_unwind 00000060 0000000000002f68 DATA 
  6 __eh_frame    000000d0 0000000000002fc8 DATA 

现在根据https://github.com/llvm/llvm-project/blob/master/llvm/test/tools/llvm-objcopy/MachO/dump-section.test,我正在尝试通过以下方式提取 __bitcode 部分:

# Take1
./bin/llvm-objcopy --dump-section=DATA,__bitcode=a.bc test.o 
./bin/llvm-objcopy: error: 'test.o': section 'DATA,__bitcode' not found

# Take2
./bin/llvm-objcopy --dump-section=__bitcode=a.bc test.o 
./bin/llvm-objcopy: error: 'test.o': section '__bitcode' not found

# Take3
./bin/llvm-objcopy --dump-section __DATA,__bitcode=a.bc test.o 
./bin/llvm-objcopy: error: 'test.o': section '__DATA,__bitcode' not found

# Take4
./bin/llvm-objcopy --dump-section=__DATA,__bitcode=a.bc test.o 
./bin/llvm-objcopy: error: 'test.o': section '__DATA,__bitcode' not found

我在这里错过了什么?

【问题讨论】:

    标签: llvm llvm-ir objdump bitcode objcopy


    【解决方案1】:

    实际上__bitcodeLLVM 部分。所以以下命令起作用了。

    llvm-objcopy --dump-section=__LLVM,__bitcode=a.bc test.o
    segedit test.o -extract __LLVM __bitcode a.bc
    

    似乎是objdump 中的一个错误,它无法识别 LLVM 部分。

    【讨论】:

      猜你喜欢
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多