首页 > 解决方案 > 将 llvm IR 转换为 NASM 程序集

问题描述

我正在尝试将一大堆 llvm IR 代码转换为在 NASM 上运行的汇编代码。我不是很熟悉汇编或llvm IR。我想知道是否有任何转译器/汇编器/工具可以帮助我做到这一点,或者是否有任何此类工具可用。

标签: assemblyllvmnasm

解决方案


LLVM-IR 仍然需要编译。例如,这样做clang -c -O3 -march=native -ffast-math,然后使用 NASM 语法反汇编器进行反汇编,例如Agner Fog'sobjconv,它产生可以组装的输出。 如何在 Linux 中反汇编二进制可执行文件以获取汇编代码?.

不过,编译 -> 反汇编对于保留标签和符号名称并不是很好。

如果您的意思是手动将 LLVM-IR 手写到可维护的 NASM 中,那么我认为移植的难易程度取决于代码使用的寄存器数量是否小于 16;x86-64 只有 15 个通用整数寄存器,不包括堆栈指针。

如果 LLVM-IR 使用更多,您需要决定哪些“变量”从堆栈溢出/重新加载(以及何时,如果您不只是将一些变量永久留在堆栈上,而将其他变量永久留在寄存器中)。


推荐阅读