sbw Blog
  • 来源: 石博文博客 | 浏览: 1909 | 评论: 0 | 时间: 2019-03-29
    上一篇中实现了一个简单的编译器插件,它的作用仅仅是在编译过程中输出所有函数的名称。那么这一篇就更深入一步来观察LLVM的中间代码及指令生成部分,从而确定应该如何修改并添加程序逻辑,以实现我们最初的“除法保护”的功能。本篇主要介绍了LLVM编译系统的一些特点及典型用法,包括LLVM的模块划分,IR中的SSA(静态单赋值)概念与 PHI 节点的概念,以及如何使用 LLVM 的 IR Builder 在编译过程修改或插入一些逻辑代码。
  • 来源: 石博文博客 | 浏览: 2171 | 评论: 0 | 时间: 2019-03-28
    在上一篇中介绍了LLVM/Clang的编译器插件可以用来进行一些简单的编译器功能扩展,从这篇开始就一步步来实现这个编译器插件。本篇主要介绍了如何建立LLVM/Clang编译器插件的开发环境及开发目录配置,如何使用CMake编译系统组织起整个工程项目来,以及使用最基本的LLVM趟管理器遍历输出函数信息等。
  • 来源: 石博文博客 | 浏览: 2278 | 评论: 2 | 时间: 2019-03-28
    LLVM/Clang 提供了编译器插件机制可供扩展编译器的功能,实际上 LLVM/Clang 本身的很多功能也是以插件方式注册到编译器系统中进行实现的。在一些对安全要求极端苛刻的环境下,或是一些特殊的硬件平台中,总有一些奇怪的需求,而这些定制化的功能如果不是很复杂,就没有必要大动干戈去修改编译器,可以使用编译器插件来完成。这个系列文章设想一种需要进行除法保护的应用场景,需要在编译层面对除法进行强制检查,以杜绝除零异常的发生。
  • 来源: 石博文博客 | 浏览: 4227 | 评论: 0 | 时间: 2019-03-25
    Let's Encrypt 现在已经支持免费的泛域名证书了。之前为 u.sbw.so 及 blog.sbw.so 等申请了好几个证书,由于申请时间不同,所以续期的时间也不同步,这样管理起来比较费事,所以最近索性全部换成了同一个泛解析的证书。过程中发现 Let's Encrypt 的文档还是介绍的不够清楚,操作起来比较费事,尤其是 DNS 验证这里,只是在 Certbot 这个软件中有一些提示,具体的用法在官网上也没有例子,查了好多文档摸索了半天终于弄好了,在此分享一下。
  • 来源: 石博文博客 | 浏览: 1910 | 评论: 0 | 时间: 2019-03-24
    POJ 1007 这个题是一个难度一般的算法题,核心是要计算每一个字符串的权值然后累加并排序。在本题中,这个权值是指为字符串中的每一个字母计算它后面有多个个字母比它小,即发生了多个次“反转”。从这个描述的一般认识来看,这是个 N^2 复杂度的模拟问题,核心在于算法优化及找模型。但由于题目的测试数据比较简单,使用 N^2 复杂度的简单方法也可以很容易通过。这就导致了这个题目的实际比赛难度其实很低。这里从解题思路及推导过程给大家做一个线性复杂度,O(N) 解题方法的分享。
  • 来源: 石博文博客 | 浏览: 2854 | 评论: 0 | 时间: 2019-03-23
    SSH 为 Linux 环境下最常用的远程连接协议,它是 SecureShell 的简写。SSH 除了可以用作安全的远程 shell 来对主机进行管理外,其套件中还包括 scp 等文件传输工具,方便本地与远程主机的文件传输。通过配置 ssh 的信任公钥证书,可以实现无密码的登陆,这在经常需要远程登陆服务器,或是一些自动化脚本,不方便写明密码的场景中非常实用。
  • 来源: 石博文博客 | 浏览: 2249 | 评论: 0 | 时间: 2019-03-21
    Nginx的访问日志access.log中记录了所有的访问历史及相关信息。对这个记录文件进行分析,可以有助于站长对网站的受众群体,流量状况等进行分析。这里为大家介绍一个专门用于日志分析的工具:GoAccess。
  • 来源: 石博文博客 | 浏览: 2135 | 评论: 0 | 时间: 2019-03-21
    POJ 1005,船屋。这是一道比较简单的几何相关的计算题,只需要推导出公式即可轻松解决。不过这个题的英文描述理解起来挺抽象,大概意思是:从坐标(0, 0)开始,有一个圆形的区域,第1年的时候,这个圆形的面积为0。这个圆形每年扩大,每年扩大的面积是50,问给定一个坐标(x, y),这个圆形多久能覆盖到这个坐标。
  • 来源: 石博文博客 | 浏览: 1766 | 评论: 0 | 时间: 2019-03-19
    POJ 1003 Hangover,这道题的意思是说有一叠卡片放在桌子的边缘,要求卡片尽可能的有更多的部分伸出到空中,但卡片整体又不能掉下去。那么在只有 1 张卡片的时候,是一半在桌子上,一半在空中,伸出去的长度是 1/2。当有两张卡片时,最多能伸出 1/2 + 1/3 = 5/6。当 n 张卡片堆叠起来时,最多伸出的长度即为 1/2 + 1/3 + ... + 1/(n+1)。先不说这个公式是不是符合物理规律,从算法上来讲是一道很简单的模拟题,按照题目所给出的计算公式递推计算结果即可。
  • 来源: 石博文 | 浏览: 4047 | 评论: 0 | 时间: 2018-05-26
    Linux 环境的一个乐趣或者说自由就是可以很方便的进行各种自定义配置,图标主题也是个人定制中最经常修改的项目之一。最近阅读了 freedesktop 中有关方面的标准定义,研究了 Qt、gtk 等框架对图标主题的查找策略与优化手段,在此做一个知识梳理,也方便大家了解更多有关 Linux 图标主题的相关特性。
  • 来源: 石博文博客 | 浏览: 7322 | 评论: 0 | 时间: 2017-09-25
    今天在 ArchLinux 上使用 bluetoothctl 连接我的 BlueDio 蓝牙耳机,发现一直无法连接成功。打开 journalctl -f 看看连接时的日志,发现在 connect 的时候,报了个 a2dp-sink profile connect failed for XXX: Protocol not available 的错误。
  • 来源: 石博文博客 | 浏览: 7727 | 评论: 10 | 时间: 2017-02-24
    Qt 中经常使用 Model-View 模型来创建列表等视图,这样设计程序结构的好处是能将数据部分和界面完全分离。其中 Model 负责数据的准备与加工,View 提供了具体的对外显示的 Widget,而 Delegate 用作在 View 上绘图的模块。而对于现代的图形程序设计,对动画效果的要求更多,需要这三个模块配合来创建动画效果。
  • 来源: 石博文博客 | 浏览: 4793 | 评论: 4 | 时间: 2017-01-24
    在 Leetcode 上看到一个题(原题地址),最长无重复子串。当时看的第一眼觉得或许可以用动态规划,今天空闲时间实现了一下。