llvm-mctoll

将二进制文件转换为 LLVM IR
授权协议 Apache-2.0
开发语言 C/C++
所属分类 程序开发、 其他开发相关
软件类型 开源软件
地区 不详
投 递 者 傅自明
操作系统 Windows
开源组织
适用人群 未知
 软件概览

llvm-mctoll 是微软的静态 translator,可静态地(AOT)将二进制文件转换(或提升)到 LLVM IR。

当前状态

Llvm-mctoll能够将X86-64和Arm32 Linux / ELF库和可执行文件提升到LLVM IR。要提升Windows,必须添加OS X和C ++二进制文件。目前,X86-64支持比Arm32更成熟。

开发和测试在Ubuntu 18.04上完成。预期可以使用的其他平台是Ubuntu 16.04,Ubuntu 17.04,Ubuntu 17.10,CentOS 7.5,Debian 10,Windows 10和OS X.

Triple VarArgs FuncProto StackFrame JumpTables SharedLibs C++
x86_64-linux X X X X X  
arm-linux X X X X X  
  • VarArgs:带有可变参数的函数调用(例如printf)
  • FuncProto:函数原型发现
  • StackFrame:堆栈框架抽象
  • JumpTables:带跳转表的switch语句
  • SharedLibs:共享库
  • C ++:vtable,名称处理和异常处理

已知的问题

此时无法引发SIMD指令,例如SSE,AVX和Neon。对于X86-64,有时可以通过编译禁用SSE(clang -mno-sse)的二进制文件来解决此问题。

大多数测试是使用使用LLVM为Linux编译的二进制文件完成的。我们仅使用GCC编译代码进行了有限的测试。

  • llvm-mctoll 是微软的静态 translator,可静态地(AOT)将二进制文件转换(或提升)到 LLVM IR。 官方代码库: https://github.com/Microsoft/llvm-mctoll 码云: https://gitee.com/mirrors/llvm-mctoll 当前状态 Llvm-mctoll能够将X86-64和Arm32 Linux / ELF库和可执

  • 参考https://blog.csdn.net/dongjideyu/article/details/107951272?utm_medium=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-OPENSE

  • LLVM是一款类似于GCC的编译器,有关这两款编译器的区别联系参考:详解三大编译器:gcc、llvm 和 clang - 知乎 (zhihu.com) 网上构建教程很多,官网也有相应教程,构建之前确保cmake版本可用,构建步骤不外乎: 从github下载源码:https://github.com/llvm/llvm-project $ git clone https://github.com/l

  • LLVM(低级虚拟机):编译器架构 (1)前端:  源代码==静态编译==>中间码 (2)后端:  中间码==运行时动态编译(非解释)==>机器码 能够使C/C++跨平台 LLVM从本质上来说,它不是一个编译器.它是一个编译器的架构.通俗的来说,它实现了一个库,在这个库上,可以很容易的实现不同的编译相关的程序,当然,编译器自然是其中最重要的一个. 当然其他像编译时间的代码分析也是很容易实现的。 L

  • 1.将C语言代码转换成llvm ir: clang -emit-llvm -S multiply.c -o multiply.ll或 clang -cc1 -emit-llvm testfile.c -o testfile.ll 2.把ll文件的LLVM IR转为bitcode格式 llvm-as test.ll –o test.bc 3.通过以下命令可把bc文件中LLVM bitcode转换为

  • Intro to the LLVM MC Project The LLVM Machine Code (aka MC) sub-project of LLVM was created to solve a number of problems in the realm of assembly, disassembly, object file format handling, and a numb

  • ~ $ brew install llvm ==> Downloading https://mirrors.aliyun.com/homebrew/homebrew-bottles/bottles/libffi-3.3.mojave.bottle.tar.gz #####################################################################

  • 下载和准备工作 先到这个网页点进到最新版的 download 连结: http://llvm.org/releases/ 然后抓 LLVM source code 和Clang source code 这两个档案。 接着把 LLVM source code 解开, 再把 Clang source code 解开丢到 llvm 的tools 目录下。 Clang source code 解开的目录名

  •   几种依赖于内置类型(built-in types)的方言转换到LLVM方言(LLVM Dialect)需要借助方言转换(Dialect Conversion)的基础设施。   本文档描述了类型和整个模块结构的类型转换。单个转换Pass(individual conversion passes)为不同方言的Op提供了一组转换模式。例如标准方言(Standard dialect)中的-conver

 相关资料
  • 我正在尝试将数字从十进制值转换为其IEEE 752形式。例如: 我写了这个方法: 有个问题我解决不了,我再举个例子说清楚。 但是当数字为负数时,例如 我收到以下错误: 这意味着我的代码可以完美地处理正数(包括零),但如果是负数,代码就会崩溃。问题出在哪里? 笔记 我想我可以用这种方式解决我的问题 检查是否有一个字符At(0)等于1 如果是(numero.charAt(0)==1),则删除第一个字符

  • 我如何将一个写为二进制的字符串转换为二进制(字节数组)? 如果我有一个字符串: 下面是当我将二进制设置为字节数组时发生的情况(字节数组返回48,这是ASCII) 我不擅长解释,所以希望上面的例子足以告诉你我想要什么。

  • 本文向大家介绍如何将八进制转换为二进制?,包括了如何将八进制转换为二进制?的使用技巧和注意事项,需要的朋友参考一下 八进制数是基数为8的数字系统之一,这意味着只有8个符号−0、1、2、3、4、5、6和7。而二进制数是数字系统、网络和计算机专业人员最熟悉的数字系统。基2只有2个符号−0和1,这些数字可以分别用off和on表示。 从八进制转换为二进制数制 将八进制数转换成二进制数有多种直接或间接的方法

  • 问题内容: 我正在尝试编写将数字转换为二进制的代码,这就是我写的。它给了我一些我不理解的Eclipse错误。怎么了 还有其他建议吗?我想学习并听取任何修复建议。谢谢。 错误消息: 类型中的方法不适用于参数() 这行有多个标记 令牌“ ”的语法错误,;; 预期 令牌“ ”的语法错误,;; 预期 是变量的无效类型 这行有多个标记 令牌“ mod”的语法错误,无效的AssignmentOperator

  • 我有下面的java代码,它接受RGB颜色的三个双倍值(0和1之间)并将它们转换为十进制格式。我明白了第一个8位如何保存颜色x,第二个8位颜色y...以及如何从结果二进制中获得十进制值。我100%不明白的是为什么我们用255乘以(我知道128 64 32 16 8 4 2 1)。我们到底从用255乘以双倍值得到了什么。它是一个可以存储在8位中的值吗?为什么我们不使用256(一种颜色的可能数量)? 谢

  • 问题内容: 如何将文件转换为二进制文件?我的项目只需要它。我需要通过二进制文件加密文件。 问题答案: 如果您要访问ACTUAL BINARY形式,则读入文件并将每个字节转换为二进制表示形式… 编辑: 以下是一些代码,可将字节转换为带有位的字符串: 如果要访问文件中的字节,则只需使用以下代码(在第一种情况下也可以使用此代码): 要使用这两段代码,您现在可以遍历每个字节并使用以下位创建一个String