使用 LLVM 进行源到源编译[关闭]

2023-11-24

我需要将 x86 汇编源代码转换为 LLVM 人类可读的 .ll 文件(又名 LLVM 汇编语言)。我怎样才能做到这一点?如果没有直接的解决方案,是否有可能以尽可能少的努力在 LLVM 基础设施中实现一个解决方案?

我想,我正在寻找的解决方案应该是某种llc的对应部分,将 .s 文件转换回 .ll 表示形式。


对于那些仍在寻找有关此主题的更多信息的人,我想分享有关一个正在进行的项目的信息(http://dslab.epfl.ch/proj/s2e)是我在网上找到的。该项目有两个组成部分:

  1. x86 到 LLVM 后端用于将 x86 机器代码动态转换为 LLVM IR
  2. RevGen用于 x86 二进制文件静态分析的工具,能够将内联 x86 程序集转换为 LLVM IR

Here is RevGen原型: RevGen 将 x86 二进制文件作为输入,并通过三个步骤输出等效的 LLVM 模块。首先,RevGen 查找所有可执行代码块并将它们转换为 LLVM 翻译块。其次,当没有更多的翻译块需要覆盖时,RevGen 将它们转换为基本块,并以 LLVM 格式重建原始二进制文件的控制流图。第三,RevGen 解析外部函数调用以构建最终的 LLVM 模块。对于动态分析,最后一步将 LLVM 模块与允许执行 LLVM 模块的运行时库链接起来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 LLVM 进行源到源编译[关闭] 的相关文章

  • 简单内核无法在 GRUB 中启动

    我正在学习一些操作系统开发的知识OSDev org http osdev org 我有一个内核 我正在尝试使用 qemu 在 GRUB Legacy 0 97 中启动 但是 当我输入kernel 200 9 我收到消息 Multiboot
  • 如何在 MOS 6502 的 asm 中创建延迟

    我是 ASM 新手 我正在尝试研究如何为以下代码创建延迟 org 1000 loop inc d021 jmp loop 我想评论已经足够清楚了 每帧更改颜色的代码示例 1 50 秒 sei enable interrupts loop1
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 内存映射图形输出

    我正在探索使用内存映射图形绘制像素和线条 我在 Windows 的 Textpad 中使用 TASM 当我单击 运行 时 整个屏幕变成蓝色 就是这样 没有绘制像素 model small stack data saveMode db xVa
  • 是否有必要每个机器码只能映射到一个汇编代码?

    假设这两者本质上是相同的 push 1 and 0x1231 这表示每个汇编指令都映射到一个机器代码 但是否每个机器码只能映射到一个汇编代码呢 MIPS汇编语言有几个 伪指令 例如 move 在内部只是一个带有隐式 0 操作数的 add
  • 查找用户输入中的第一个和最后一个大写字母

    输入将从 a z 或 A Z 中获取 并且输入以星号结束 我们需要将输入字符的第一个和最后一个大写字母作为输出 另外 我们应该显示每次输入的内容 注意 我们逐个字符地获取输入 而不是作为字符串 测试用例1 输入 aAbCcP 输出 AP 测
  • 如何从内存加载值而不污染缓存?

    我想读取内存位置而不污染缓存 我正在 X86 Linux 机器上工作 我尝试使用 MOVNTDQA 汇编指令 asm movntdqa source dest n t dest x my var source m my mem 0 memo
  • x86 asm 的 NASM 语法中的括号是什么意思?

    给出以下代码 L1 db word 0 mov al L1 mov eax L1 括号里是什么意思 L1 代表 这个问题专门针对 NASM Intel 语法汇编的另一个主要风格是 MASM 风格 当不涉及寄存器时 括号的工作方式有所不同 S
  • 如何在 x86 ASM 中将整数转换为浮点值?

    我需要将一个整数 二进制补码 乘以一个浮点常数 这是我所拥有的 data pi dd 3 14 int dd 0ah code fld pi fmul ST 1 ST 我怎样才能转换int乘以浮点值pi 你需要fild操作说明 这是一个参考
  • 在 OllyDbg 和 Assembler 中,EBP+8 是什么意思?

    我正在学习 OllyDbg 中的汇编和调试技巧 以便学习如何使用未记录的函数 现在我遇到以下问题 我有以下代码部分 来自 OllyDbg MOV EDI EDI PUSH EBP MOV EBP ESP MOV EAX DWORD PTR
  • 从 LLVM 位码编译对象时无法链接静态库。

    我正在开发 LLVM 编译器通道 我通过以下方式运行通行证 编译为 LLVM 位码 clang foo c emit llvm c o foo bc 通过opt运行foo bc 不执行这一步仍然出现错误 编译回目标文件 clang c o
  • 问题与 Assembly x86-32 RET n 指令有关

    我知道 Ret n 的含义 但我无法弄清楚它在维护程序运行时堆栈方面的作用 我在那里有点困惑 ret 和栈有关系吗 ret n就好像ret add esp n 您可以将其用于 caller pops 调用约定 Plain ret就好像pop
  • 未生成隐式移动函数

    我有以下课程 class Blub public Blub int value Not a copy constructor Blub Blub default This line is necessary because move con
  • ASM 中从小端到大端的快速转换

    我在 C 中有一个 uint 类型数组 在检查程序是否在小端机器上运行后 我想将数据转换为大端类型 因为数据量可能会变得非常大 但总是均匀的 所以我想考虑将两个 uint 类型作为 ulong 类型 以获得更好的性能并在 ASM 中对其进行
  • 帮助我改进更多 SSE2 代码

    我正在寻找一些帮助来改进 core2 cpu 上的双线性缩放 sse2 代码 在我的 Atom N270 和 i7 上 此代码比 mmx 代码快大约 2 倍 但在 core2 cpu 下它只等于 mmx 代码 代码如下 void Conve
  • 了解使用内存源操作数和 x87 fcomi / fcmov 的 GCC 内联汇编代码

    我正在阅读研究论文Privado 实用且安全的 DNN 推理 用于隐藏依赖于输入的分支 https arxiv org pdf 1810 00602 pdf 我试图理解该论文中的以下 GCC 汇编代码 float temp asm vola
  • llvm clang 编译器上的dynamic_cast失败

    我看到一个奇怪的失败dynamic cast正在返回NULL在 clang 编译器上 但相同的代码可以在 gcc 环境下运行 您能否指出根本原因是什么 之间可能有什么区别dynamic cast关于 llvm 和 gcc 我正在使用两个编译
  • emu8086中如何使用字符串

    我需要 emu8086 中字符串的帮助 我已经初始化了一个字符串 str1 db 0neWord 我有一个空字符串 str2 db 现在我需要检查所有信件str1并复制到str2 但如果字母在str1是 0 我需要将其替换为 O 如果不是
  • x86指令“call dword ptr ds:[00923030h]”是什么意思? [复制]

    这个问题在这里已经有答案了 下面的 x86 汇编指令有什么作用 call dword ptr ds 00923030h 我怀疑这是一个间接调用 但它到底是如何计算调用的地址的 编辑 已更新 每当你看到一个看起来像这样的内存操作数时ds 0x
  • ARM(64 位)上的面向返回编程

    我正在 ARM 64 位 上研究 Rop 因此 我正在 ARMv8 Cortex A 72 上测试 Rop 漏洞 以了解它在 Arm64 上的工作原理 我写了一个非常简单的易受攻击的c代码 include

随机推荐

  • 使用 IronPython 通过 C# .NET 导入 Python 模块

    我正在尝试使用 IronPython 通过 C NET 运行 Python 类 Python 类导入的几个模块是 import collections import nltk classify util 为了在运行 IronPython 时
  • Django 1.2 对象级权限 - 第三方解决方案?

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 由于 Django 1 2 Final 即将发布 我很好奇是否已经有项目使用新的对象级权限 行级权限系统 Django 权威 这是
  • 原因:retrofit.RetrofitError:方法 POST 必须有请求正文

    我正在使用 Retrofit 进行 API 后调用 在尝试访问端点时收到以下错误 Caused by rx exceptions OnErrorNotImplementedException method POST must have a
  • UNIX 域套接字和 Cocoa

    我想在 Cocoa 应用程序中使用 UNIX 域套接字实现 IPC 但我对此没有经验 我找到了苹果的CF本地服务器示例项目 但它是用 C 编写的 看起来相当复杂 是的 我已经阅读了其中的大部分内容 CFLocalServer 中演示的技术是
  • 使用 groupby 获取组中具有最大值的行

    如何找到 pandas DataFrame 中具有最大值的所有行count分组后的列 Sp Mt 列 示例1 以下数据框 Sp Mt Value count 0 MM1 S1 a 3 1 MM1 S1 n 2 2 MM1 S3 cb 5 3
  • 为什么必须定义未使用的虚函数?

    我觉得很奇怪的是 与未使用的普通函数不同 未使用的虚拟函数仍然必须被定义 我对隐含的内容有些了解vtables and v指针它们是在创建类对象时创建的 这在某种程度上回答了这个问题 必须定义该函数 以便可以定义指向虚函数的指针 但这将我的
  • 在 cabal 上使用 extra-lib-dirs 的相对路径

    我有一个 C 库 myboo 其中包含 Makefile 我想制作这个库的包装 我不想将其安装到 usr local 中 因为 myboo 不是主要模块 另外 建议我构建 myboo 而不是动态库 但作为静态库 我制作自定义Setup py
  • Dapper 和 MS Access - 读取有效,写入无效

    让我们首先解决这个问题 我一直在使用 MS Access DB 而且无法更改它 这工作正常 using OleDbConnection conn ConnectionHelper GetConnection conn Open var re
  • Grails 文件上传问题

    我正在尝试模拟 grails 网站的文件上传代码 但遇到了一些问题 我使用的代码与找到的相同here 这是我的代码
  • 从外部调用 React 组件方法

    我想从 React 元素的实例调用 React 组件公开的方法 例如 在这个jsfiddle 我想打电话给alertMessage方法从HelloElement参考 有没有一种方法可以实现这一点而无需编写额外的包装器 Edit 从 JSFi
  • XSLT 样式表用空的配对标签替换自关闭标签

    我正在使用 XSLT 处理 ASP Net web config 文件以插入一些额外的 log4net 配置 它由称为 NANT 标准任务的应用
  • Firebase Unity3D 桌面应用程序 (Mac/PC) - 是否有效?

    Firebase 在此处的文档中 文件 A https firebase google com docs unity setup 它声称它现在适用于桌面版本 因此 您可以统一创建 Mac 应用程序或 Windows 应用程序 它确实可以在
  • 动态单选按钮控制

    代码 private void createRadioButton final RadioButton rb new RadioButton 5 for int i 0 i lt 5 i rb i new RadioButton this
  • 实体框架:单例 ObjectContext - 好、坏还是想太多?

    这个想法是创建一个公开上下文但处理它在 Web 应用程序中的存储的类 目前 这就是我所拥有的 public class EntityContext private static String MAIN CONTEXT KEY MainCon
  • GAE/J 请求日志格式细分

    以下是 GAE 控制台日志记录的示例 https i stack imgur com M2iJX png for readable high res version 我想提供文件的详细信息 显示在折叠 摘要 视图和展开 详细 视图中 我将填
  • 有人成功构建了 Cygwin 版本的 GHC 吗?

    有没有人成功构建了 GHC 的 Cygwin 版本 自从 Haskell 从使用 Cygwin 切换到 MinGW 来自哈斯克尔网站 GHC 的目标是 MinGW 而不是 Cygwin 原则上可以构建一个针对 Cygwin 的 GHC 版本
  • 将 HTML 源代码保存到文件

    如何在 Python 3 中将网站的源代码复制到文本文件中 编辑 为了澄清我的问题 我有以下内容 import urllib request def extractHTML url f open temphtml txt w page ur
  • malloced 数组 VS.malloced 数组可变长度数组[重复]

    这个问题在这里已经有答案了 有两种方法可以为数组分配内存 数组的大小一开始是未知的 最常见的方法是使用malloc像这样 int array when we know the size array malloc size sizeof in
  • 无法从“node_modules/expo/AppEntry.js”解析“../../App”

    我正在用 expo 制作一个 vue 原生应用程序 升级到 expo 版本 33 时 出现以下错误 无法从 node modules expo AppEntry js 解析 App 需要升级到版本 33 是 因为我需要 expo 文件系统模
  • 使用 LLVM 进行源到源编译[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要将 x86 汇编源代码转换为 LLVM 人类可读的 ll 文件 又名 LLVM 汇编语言 我怎样才能做到这一点 如果没有直接的解决方案 是否有