链滴
社区愿景和功能特性
优雅的 Markdown 所见即所得编辑
快捷键交互
随时自由编辑分享内容
支持注销账号来去自由
分布式社区网络
开放 API
产品
Symphony 社区系统(Java)
Solo 博客系统(Java)
Vditor 编辑器(TypeScript)
思源笔记(Electron、Go)
Pipe 博客平台(Vue、Go)
发展计划表
发展简史
榜单
GitHub 仓库排行
帖子打赏排行
Solo 博客端排行
积分排行
活跃度排行
贡献排行
本站基于开源项目 Sym
编程代码问答
登录
注册
首页
>
标签
LLVM
20
引用 •
3
回帖 •
1
关注 •
593
浏览
参与讨论
关注
关注
分享
Tree
35
引用 •
6
回帖
编译原理
21
引用 •
39
回帖 •
2
关注
软件工程
29
引用 •
81
回帖
性能
63
引用 •
180
回帖
程序员
程序员是从事程序开发、程序维护的专业人员。
568
引用 •
3532
回帖 •
1
关注
符号执行
1
引用
Easy
101
引用 •
10
回帖
默认
热议
好评
优选
最近回帖
关注者
查看所有标签
KLEE 源码安装(Ubuntu 16.04 + LLVM 9)
原文链接: [链接] 符号执行在近几年的软件测试及漏洞挖掘领域越来越火,其主要思想是把程序的执行路径转化为一个个路径约束,然后使用约束求解器求解这些约束,从而生成特定覆盖路径的测试用例。其中最有名的工具就属 KLEE 了。KLEE 是建立在 LLVM 编译器基础结构之上的符号执行虚拟机,从 2008 年提出以来,已经在 ..
1.3K
4 年前
Kaleidoscope 系列第九章:增加调试信息
原文链接:[链接] 本文是[链接]系列第九章,将为 Kaleidoscope 添加调试信息,帮助高效开发新语言。 第九章简介 欢迎来到“[链接]”教程的第九章。在第一章至第八章中,我们构建了一种带有函数和变量的体面的小型编程语言。这时会有一个问题,那就是如果出了问题怎么办,如何调试程序? 源代码级调试使用格式化的数据, ..
337
5 年前
Kaleidoscope 系列第八章:编译为目标代码
原文链接: 本文是系列第八章,将生成的代码编译为目标机器代码。 第八章简介 欢迎来到“”教程的第八章。本章介绍如何将我们的中间代码编译为目标代码。 选择一个目标 LLVM 支持本地交叉编译。我们可以将代码编译为当前计算机的体系结构,也可以像针对其他体系结构一样轻松地进行编译。在本教程中,我们主要针对当前计算机。 为了指 ..
468
5 年前
Kaleidoscope 系列第十章:总结和其他技巧
原文链接: 本文是[链接]系列第十章,对 Kaleidoscope 开发过程进行总结,分析可能使用到的其他技巧。 教程总结 欢迎来到“[链接]”教程的最后一章。在本教程的过程中,我们已经将 Kaleidoscope 这种小语言从一种无用的玩具发展为一种半有趣(但可能仍然无用)的玩具语言。 有趣的是,我们已经走了多远,花 ..
284
5 年前
Kaleidoscope 系列第七章:扩展语言—可变变量
原文链接: [链接] 本文是[链接]系列第七章,继续扩展 Kaleidoscope 语言特性,增加可变变量处理。 第七章简介 欢迎来到“[链接]”教程的第七章。在第一章至第六章中,我们构建了一种尽管简单的但是非常像样的 [链接]。在我们的开发过程中,我们学习了一些解析技术,包括如何构建和表示 AST,如何构建 LLVM ..
306
5 年前
Kaleidoscope 系列第六章:扩展语言—用户自定义运算符
原文链接:[链接] 本文是[链接]系列第六章,继续扩展 Kaleidoscope 语言特性,增加用户自定义运算符处理。 第六章简介 欢迎来到“[链接]”教程的第六章。至此,在本教程中,我们现在有了一种功能齐全的语言,该语言相当少,但也很有用。但是,仍然存在一个大问题。我们的语言没有很多有用的运算符(例如除法,逻辑求反, ..
239
5 年前
Kaleidoscope 系列第五章:扩展语言—控制流
原文链接: Kaleidoscope 系列第五章:扩展语言---控制流 本文是使用 LLVM 开发新语言 Kaleidoscope 教程系列第五章,主要扩展 Kaleidoscope 语言特性,增加多种控制流处理。 第五章简介 欢迎来到“使用 LLVM 开发新语言 Kaleidoscope 教程”教程的第五章。第 1- ..
311
5 年前
Kaleidoscope 系列第四章:添加 JIT 和 Optimizer 支持
原文链接: [链接] 本文是[链接]系列第四章,主要添加 JIT 编译器及 LLVM 中部分优化功能。 第四章简介 欢迎来到“[链接]”教程的第四章。前一至三章介绍了一种简单语言的实现并增加了对生成 LLVM IR 的支持。本章介绍了两种新技术:为我们的语言添加优化器支持,以及添加 JIT 编译器支持。这些补充内容将演 ..
348
5 年前
Kaleidoscope 系列第三章:生成 LLVM 中间代码 IR
原文链接:[链接] 本文是[链接]系列第三章,主要实现将 AST 转化为 LLVM IR 的功能。 第三章简介 欢迎来到“[链接]”教程的第三章。本章介绍如何将第二章中构建的[链接]转换为 LLVM IR。本章将告诉我们一些有关 LLVM 如何工作的知识,并演示它的易用性。构建词法分析器和解析器要比生成 LLVM IR ..
624
5 年前
Kaleidoscope 系列第二章:实现解析器和 AST
原文链接: [链接] 本文是[链接]系列第二章,主要实现 Kaleidoscope 语言的语法解析并生成 AST 的功能。 第二章简介 欢迎来到“[链接]”教程的第二章。本章向我们展示如何使用[链接]中构建的词法[链接]为我们的 Kaleidoscope 语言构建完整的[链接]。有了解析器后,我们将定义并构建一个[链接 ..
254
5 年前
Kaleidoscope 系列第一章:新语言特性和 Lexer
原文链接 [链接] 本文是 [使用 LLVM 开发新语言 Kaleidoscope 教程] ([链接]) 系列第一章,主要介绍 Kaleidoscope 语言特性和词法分析器的构建。 Kaleidoscope 语言特性 本教程以一种名为“[链接]”(google 翻译为万花筒,源自“美丽,形式和视野”)的玩具语言进行开 ..
383
5 年前
使用 LLVM 开发新语言 Kaleidoscope 教程
原文链接: [链接] 前言: 本系列是 [链接] 译文,诣在熟悉 LLVM 的开发流程,网上有一些翻译只有前三个部分,没有翻译全,并且都是四五年前的没有更新过。由于对于编译器的概念只停留在理论上,想从代码的角度深入理解一下编译器,希望通过这部分的练习可以帮助到我。利用国庆假期这几天,我会仔细阅读此系列文档及源码并尝试翻 ..
1.7K
2 年前
[每日 LeetCode] 637. Average of Levels in Binary Tree
原文链接 [链接] Description: Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array. Example 1: Input: 3 / \ 9 20 ..
166
5 年前
LLDB 调试命令使用指南
原文链接 LLDB 调试命令使用指南 前言 LLDB Debugger (LLDB) 是一个开源、底层调试器(low level debugger),具有 REPL (Read-Eval-Print Loop,交互式解释器)、C++ 和 Python 插件,位于 Xcode 窗口底部控制台中,也有其他 IDE 加入了 ..
5.1K
5 年前
LLVM IR 基础介绍
LLVM IR 是什么? 根据编译原理知识,编译器不是直接将源语言翻译为目标语言,而是翻译为一种“中间语言”,我们编译器从业人员称之为“IR”--指令集,之后再由中间语言,利用后端程序和设备翻译为目标平台的汇编语言。 无疑,不同编译器的中间语言 IR 是不一样的,而 IR 可以说是集中体现了这款编译器的特征----他的 ..
2.6K
5 年前
LLVM 概述二:LLVM 设计精髓及其优势
本文是 LLVM 概述一:编译器背景及 LLVM 初探的下半部分,本部分介绍 LLVM 主要的设计思想及优势。 LLVM 的三阶段实施 在基于 LLVM 的编译器中,依然保持原始编译器的三阶段设计,LLVM 前端负责解析,验证和诊断输入代码中的错误,然后将解析的代码转换为 LLVM IR(通常但不总是通过构建 AST ..
649
5 年前
LLVM 概述一:编译器背景及 LLVM 初探
前言 本文较长,部分翻译自《The Architecture of Open Source Applications: LLVM》 。 此文章介绍前半部分,即编译器的背景及 LLVM 初探,后半部分主要说明 LLVM 项目的设计原理和主要优势。 LLVM [1] 是一个包含和开发一组紧密结合的低级工具链组件(例如,汇编 ..
416
5 年前
Learning LLVM Part 2
Understanding LLVM Part 2 咕咕咕,接上篇[链接]。这篇大概梳理一下这两个月摸鱼时候遇到的坑。 一些坑 如果要编译成功 LLVM 树,那么熟练的使用各种方式把代码拖下来,再用合适的环境编译必不可少。 其实编译这个巨大的东西,还需要好一点的硬件设备(一般我们会都卡在硬盘 IO 上,IO 卡住了就会 ..
659
5 年前
Learning LLVM Part-1
(这个还没写完 TAT) LLVM 不仅仅是一个编译器,而是一个有很多特性的编译框架,比如 JIT、支持了很多非类 C 语言,如 Rust 等等,此外,还是一种 App Store 上的[链接]。 LLVM 和其他编译器不同的地方是: LLVM 的中间表示,即 LLVM IR 是一个创新,有了比汇编语言更好的可读性 L ..
281
6 年前
详解 LLVM 混淆器
作者:Kareem El-Faramawi | Toshi Piazza 译:Skye LLVM 混淆器是一个工业级的混淆器,在近几年的 CTF 比赛中频频出现。这篇博文主要包括了我们在理解混淆器本身的设计方面的工作,以及在模糊处理的实现中可能存在的弱点。我们使用 Binary Ninja 及其插件来使这方面的工作自动 ..
1K
6 年前