LLVM IR bitcode文件反编译

LLVM IR bitcode文件反编译

脚本安装

使用官方安装脚本安装

仅适用于Debian/Ubuntu

wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 13

使用包管理器安装

Ubuntu

先在/etc/apt/source.list加入以下内容

deb http://apt.llvm.org/focal/ llvm-toolchain-focal-13 main
deb-src http://apt.llvm.org/focal/ llvm-toolchain-focal-13 main

然后执行以下shell命令

sudo apt update

sudo apt install clang-13

安装clang编译器时会自动安装所依赖的LLVM库,lldb等其他组件需要单独安装

macOS

brew install llvm

从源码编译安装

以LLVM 13.0.1为例

编译LLVM需要事先在系统中安装符合以下条件的软件

  • CMake >= 3.4.3
  • GCC >= 5.1.0
  • Python >= 2.7
  • zlib >= 1.2.3.4
  • GNU Make >= 3.79

按照以下命令从源码编译安装LLVM

# 下载源码
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-project-13.0.1.src.tar.xz
# 解压源码
tar xvf llvm-project-13.0.1.src.tar.xz
# 新建安装目录
sudo mkdir -p /usr/local/llvm
# 新建编译目录
sudo mkdir -p llvm-project-13.0.1.src/build
# 进入编译目录
cd llvm-project-13.0.1.src/build
# cmake生成编译信息
cmake -G "Unix Makefiles" -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_BUILD_TYPE="Release" -DLLVM_INCLUDE_TESTS=OFF -DCMAKE_INSTALL_PREFIX="/usr/local/llvm" ../llvm
# 编译
cmake --build .
# 安装到安装目录
cmake --build . --target install

/usr/local/llvm是安装目录(可自定义), llvm-project-13.0.1.src是源码目录, llvm-project-13.0.1.src/build是编译产物目录

这里用的构建工具是make,当然也可以用速度更快的ninja

使用

如果你想得到.s,可以执行命令:./llc baby.bc -o baby.s

如果你想得到.ll,可以执行命令:llvm-dis baby.bc -o baby.ll

如果你想得到可执行文件,可以执行命令:as baby.s

很多编译器可以从中间表示直接生成高级语言的c或fortran,如open64的whirl2c和whirl2f,但llvm是否支持从.ll文件或.bc文件到高级的.c呢?不多说,继续上图:

file

为了大家更清楚的看图,再归纳一下:

  • a.c,源代码。
  • a.bc,llvm的字节码的二进制形式。
  • a.ll,llvm字节码的文本形式。
  • a.s,机器汇编码表示的汇编文件。
  • a.out,可执行的二进制文件。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇