自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (3)
  • 收藏
  • 关注

原创 LLVM 好用的option

1. -opt-bisect-limit 可结合禁用超过指定限制的所有优化pass,帮助跟踪在优化期间不正确的转换导致不正确运行时行为的问题。

2021-06-16 17:49:15 275

转载 LLVM代码混淆分析及逻辑还原

概述LLVM Obfuscator是一款工业级别的代码混淆器,在过去几年的CTF里我们经常会遇到经过代码经过它混淆的情况。这片博文记录了我们对混淆器原理的研究以及从中发现的有关混淆器的设计实现的脆弱之处。基于我们的研究结果,我们在Binary Ninja平台上写了一个插件,通过这个插件可以自动化的解决掉由于代码混淆带来的逆向分析困难。LLVM Obfuscator简介LLVM Obfuscator是一个基于LLVM框架实现的一个开源代码混淆器,整个项目包含了三个相对独立的LLVM pass, 每

2021-06-02 10:29:45 1706

原创 ubuntu安装clang/llvm

Mark官网介绍:https://apt.llvm.org/

2021-04-25 16:44:04 672 1

转载 C++ RAII机制

前言在写C++设计模式——单例模式的时候,在写到实例销毁时,设计的GC类是很巧妙的,而这一巧妙的设计就是根据当对象的生命周期结束时会自动调用其析构函数的,而这一巧妙的设计也是有专业的名词的——RAII。那以下将围绕RAII,全面的讲解RAII的相关知识。什么是RAII?RAII是Resource Acquisition Is Initialization的简称,是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取

2021-04-23 11:11:39 124

原创 clang及opt的opt level和pass list

一. Clang和opt执行的pass序列相同,可以通过下面命令查看:Clangclang -OX -mllvm -debug-pass=Arguments foo.corclang -OX -mllvm -debug-pass=Structure foo.cOptllvm-as < /dev/null | opt -O3 -disable-output -debug-pass=Arguments二.https://stackoverflow.com/questio..

2021-04-21 11:25:06 1398

转载 P、NP、NPC和NP-Hard相关概念的图形和解释

版权声明:本文为博主原创文章,遵循<a href="http://creativecommons.org/licenses/by-sa/4.0/" target="_blank" rel="noopener"> CC 4.0 BY-SA </a>版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/huang1024rui/article/details/49154507收起P、NP、NPC和NP-Hard相关概念的图形和解释

2021-01-14 10:39:49 315

原创 LLVM源码调试

编写Pass时,可以借助DEBUG宏添加调试代码,这些代码只有在工具命令行加入“-debug”选项时才会执行。1. 编译LLVM debug版本release版本中一般已关闭DEBUG宏,可以自己编译debug版本,以使能DEBUG宏用于调试。编译LLVM时,将build type设为Debug即可:cmake -DCMAKE_BUILD_TYPE=Debug ... ...2. DEBUG宏定义llvm/include/llvm/Support/Debug.h3. Clang...

2021-01-05 17:38:21 3822

转载 LLVM中的pass及其管理机制

LLVM编译器框架的核心概念是任务调度和执行。编译器开发者将IR分解为不同的处理对象,并将其处理过程实现为单独的pass类型。在编译器初始化时,pass被实例化,并被添加到pass管理器中。pass管理器以流水线的方式将各个独立的pass衔接起来,然后以预定义顺序遍历每个pass,根据pass实例返回值启动、停止或重复运行不同pass。因此,LLVM pass管理机制的主要模块包括pass、pass管理器、pass注册及相关模块,如PassRegistry、AnalysisUsage、AnalysisRes

2020-11-26 10:06:47 7191 1

转载 LLVM测试框架

LLVM测试框架LLVM测试框架简介在LLVM编译器后端开发过程中,针对特定平台必然要定义特定指令集及其指令格式,并对后端流程的各个阶段或pass做相应修改。根据需求编写“测试用例”的测试驱动开发(Test-DrivenDevelopment,简称TDD)是推动开发进行的有效方法,可以在出现问题时实现可回溯,有助于编写简洁可用和高质量的代码。LLVM测试框架是在LLVM编译器后端开发过程中实现测试驱动开发的有效手段,有很高的灵活性和健壮性,可保证加速开发过程稳步进行。本文涵盖LLVM测试框架,需

2020-11-25 16:17:35 1486

转载 ASAP和ALAP

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:http://blog.csdn.net/xiaxiaing00/article/details/78250235收起一、ASAP和ALAP的概念最近在看一些算法的论文,其中涉及了ASAP和ALAP算法,这两种算法由很多的应用背景,在此仅阐述对于图中节点执行顺序的选择。首先从字面上理解,ASAP是as soon as possible,是尽快执行的意思,即当图中节点没有依赖关系和..

2020-09-18 17:59:17 2244

转载 自己动手写LLVM pass(零)

原文连接:https://llvm.comptechs.cn/post/18789.html您已经跟随着LLVM的官方教程完成了HelloWorld pass…..现在,您想学的更多,看更多的代码,例子……因此,您可以深入到无比优秀的LLVM源代码树,了解这些着名且功能强大的优化如何通过pass实现的…但结果却是被异乎寻常的传递构造语法所迷惑,这种语法既不类似于你刚刚遵循的教程,也没有在官方网站的任何地方记录这正是我几年前碰到的,当时,我还是一个LLVM新手和LLVM pass是我之前

2020-08-26 11:27:23 337

转载 自己动手写LLVM Pass(四)

在stackoverflow上有关LLVM的最常见问题之一是:我写了一个Hello World Pass,如何使用clang来运行它,而不是opt?最常见的解决方案之一是单独使用(传统)PassManager扩展点和-Xclang -load -Xclang MyPass.so命令行选项。然而,我想知道:我可以通过简单地将一个命令行选项传递给clang来运行我的Pass或自定义功能吗?当然,这需要对LLVM源代码树进行一些更改。但我相信这将是学习clang内部以及它如何与LLVM交互的...

2020-08-26 11:26:10 403

转载 自己动手写LLVM Pass(三)

LLVM Pass官方教程会教您如何编译一个相当简单的(Legacy)LLVM Pass,她能够被opt动态加载。但现在你是一个懒惰的家伙,你想自动的在opt甚至clang中运行您的Pass。本文提供了将Pass集成到旧版PassManager管道的几种方法之一。然后,我的下一篇文章将讨论如何添加自定义clang命令行选项以启用自定义功能。默认情况下,要在Pass管道中运行Pass,我们需要先弄清楚管道是如何构建的。有一个构建器类,PassManagerBuilder用于构建旧版PassMana...

2020-08-26 11:12:47 632

转载 自己动手写LLVM Pass(二)

收集程序分析的任务也被建模为LLVM PassManager中的Pass,除了它们从不(也不应该)修改IR。此外,与传统的PassManager相比,分析数据在新的PassManager中以不同的方式进行管理和开发,我决定使用单独的文章来介绍它。本文将讨论如何使用新的AnalysisManager检索分析数据。所以抓住你最喜欢的编辑器,让我们开始吧!您可能在传统Pass中找到的重要功能之一是分析管理器与PassManager深度集成。您将通过getAnalysis<…>方法...

2020-08-26 11:10:17 509 1

转载 自己动手写LLVM Pass(一)

PassManager系统是LLVM中最重要的基础架构之一。经过大约10多年的努力,开发人员决定给她一个新的面目。新的PassManager Pass背后的基本概念仍然与旧版本相同:通过LLVM IR单元运行Pass,例如,功能来检查内部的IR或甚至修改它,然后将结果IR传递给下一个Pass管道。最大的区别是我们写Pass的方式。新Pass和新PassManager背后有几种设计理念。我强烈建议读者查看过去LLVM开发者大会的相关讲座。但我不打算详细介绍。本文仅通过简单的HelloNewPMP.

2020-08-26 10:43:43 1194

原创 C++ Using用法汇总

一、限定名称 导入命名空间或变量到作用域。 using namespace 命名空间; using 变量名称;二、 指定别名(C++11) 指定变量别名,等同于typedef,在C++11后用于取代typedef。三、派生类中引用基类成员变量/成员函数(C++11)...

2020-08-24 18:04:05 2858

原创 pkg-config

pkg-config是什么? pkg-config是一个linux下的命令,用于获得一个库/模块的所有编译相关的信息。 用法:pkg-config opencv --libs --cflags 这样引用opencv模块时,借助pkg-config可以方便的引用头文件和库。而不需要自己手动查找。 pkg-config信息查找来源 a. 系统/usr/lib下的所有*.pc文件 b. PKG_CONFIG_PATH环境变量所指向路径下的所有*.pc文件。 pkg-config常用参数 a. pk

2020-08-18 14:11:48 107

转载 CMake第三课  安装自己编写的头文件和共享库

一.完整过程  手把手教你学CMake,上一节讲到了安装文件。这一节我们将自己动手写一个动态库和一个静态库,并安装头文件和共享库以供其他程序使用 。下一节,我们将编写程序,应用这一节安装的头文件和库文件。本节还是以输出Hello World 字符串为例进行讲解。====================================================================================绝对路径:/home/guo/cmake_practice/3(工程.

2020-08-18 10:44:24 1210 1

原创 关于ICU4C

ICU4C 用户指南:http://icu.sourceforge.net/userguide/intro.htmlICU4C API DOC:http://icu.sourceforge.net/apiref/icu4c/index.htmlXLIFF相关知识:http://www.oasis-open.org/committees/xliff/documents/xliff

2012-04-24 16:53:08 1071

原创 CTS 兼容性测试

CTS :Compatibility Test Suite兼容性测试工具。当电子产品开发出来,并定制了自己的Android系统后,必须要通过最新的CTS检测,以保证标准的android application能运行在该平台下。通过了CTS验证,需要将测试报告提交给Google,以取得android market的认证。一、CTS测试环境搭建1、可通过如下两种方式获取Compatibilit...

2011-12-23 14:20:14 1360

linux 下GNU工具链的使用介绍

简要介绍如何使用linux GNU工具链

2010-01-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除