assembly - 将 llvm IR 转换为 NASM 程序集
问题描述
我正在尝试将一大堆 llvm IR 代码转换为在 NASM 上运行的汇编代码。我不是很熟悉汇编或llvm IR。我想知道是否有任何转译器/汇编器/工具可以帮助我做到这一点,或者是否有任何此类工具可用。
解决方案
LLVM-IR 仍然需要编译。例如,这样做clang -c -O3 -march=native -ffast-math
,然后使用 NASM 语法反汇编器进行反汇编,例如Agner Fog'sobjconv
,它产生可以组装的输出。 如何在 Linux 中反汇编二进制可执行文件以获取汇编代码?.
不过,编译 -> 反汇编对于保留标签和符号名称并不是很好。
如果您的意思是手动将 LLVM-IR 手写到可维护的 NASM 中,那么我认为移植的难易程度取决于代码使用的寄存器数量是否小于 16;x86-64 只有 15 个通用整数寄存器,不包括堆栈指针。
如果 LLVM-IR 使用更多,您需要决定哪些“变量”从堆栈溢出/重新加载(以及何时,如果您不只是将一些变量永久留在堆栈上,而将其他变量永久留在寄存器中)。
推荐阅读
- django - 我需要使用 django_cron 的帮助
- javascript - 如何通过创建对象从 aspx 页面调用 jQuery-plugin 函数?
- jquery - 如何在 jquery 中切换道具“禁用”
- sql - 如何从 FLAT FILE 源更新表中的所有列
- web-scraping - 从网页实时抓取实时数据?
- apache-flink - 更新 keyBy() 中指定的密钥
- sql - 如何在 INFORMIX 的 where 子句中使用 if 语句?
- java - 如何在检票口框架中使用 html5 颜色输入类型
- php - 我的 PHP cURL 请求是否因为在 URL 中使用了变量而导致格式错误?
- sql - 如何确保 SQL 数据库设计将是跨平台的