关于try-with-resources不知道的事 谁来背锅try-with-resource是Java 1.7中新增的,来打开资源,而无需手动关闭语法糖。官方介绍如下: The try-with-resources statement is a try statement that declares one or more resources.A resource is an object that must be closed after t 2019-06-19 Other bytecode Java
LLVM Pass从添加到执行的过程 clang的过渡要想搞清楚Pass添加和执行的过程首先要清楚如何从编译前段的clang过渡到LLVM。 当AST构建完成之后交给ASTConsumer的子类BackendConsumer处理。首先将会通过CodeGenerator来完成从AST到IR的转换。转换完成之后调用HandleTranslationUnit 2018-04-14 Compiler LLVM Compiler
赋值语句返回的原罪 今天翻看王垠的Blog,有一篇引起了我的注意 Yoda 表示法错在哪里 。 其实这是一个古老的问题,用王垠的话讲这是一个典型的“先辈的罪”(Sins of our Forefathers)。我更愿意叫它“历史遗留问题”。 2018-03-27 Other C++
C++17 string_view string_viewC++17的标准中,string_view是一个比较惊喜的东西,有机会用于字符串相关操作的优化。string_view的设计思路类似于slice,通过片段应用减少buffer的复制。 2018-01-27 C++ C++
链接与符号 链接链接的本质就是把多个不同编译单元(目标文件)相互整合到一起。整合的方式是通过地址的确定。 从单个编译单元的角度看,自己内部的声明可以按有无定义分为两类。对于有定义的一类,程序执行时自然可以定位地址完成相应操作,也就是地址是已知的。对于无定义的一类,由于是采用的外部的函数或者全局变量,地址是未知的,链接就是给未知的地址进行定位。 2018-01-22 Other 编译原理 链接
LLDB与Python 加入Python模块首先获取lldb的python模块路径 lldb -P 在Python的site-packages路径下加入.pth文件,比如Extra.pth 将模块路径写入文件即可 2018-01-11 Other LLDB Python Debug
replace_function_name replace_function_name是由一个完整的clang编译器,在CodeGen时通过修改CodeGenModule::getMangledName函数的流程来达到修改函数名的目的。 项目地址 https://github.com/penguin-wwy/replace_function_name 详细使用方式和效果对比请看github。 2017-12-21 Open Source Project LLVM Security
代码混淆——复杂度进化 上一篇中我们对Armariris进行了一定的改进,主要在对体量较大的BasicBlock进行了切割,增加了一条从当前BasciBlock到它前驱的控制流,并且恒为假。 有两个比较明显的问题: (1)分支判断过于简单; (2)增加的只是一条控制流线,并没有增加程序块,所以程序复杂度上升的有限。 2017-12-18 代码混淆 LLVM Security
代码混淆——控制流扁平的开源实践和改进 孤挺花(Armariris): 由上海交通大学密码与计算机安全实验室维护的LLVM混淆框架,支持多平台、多语言。目前支持的功能主要有控制流混淆、指令替换、字符串加密。https://github.com/GoSSIP-SJTU/Armariris#armariris 2017-11-28 代码混淆 LLVM Security
C++类型转化表达式总结 const_cast根据 http://www.cplusplus.com 的说法,const_cast用于对象指针或引用的const的添加和删除操作 例子如下: 2017-09-16 C++ C++
代码混淆——控制流扁平定义与算法 扁平化的定义所谓控制流是指代码执行时指令的执行顺序。在各种控制逻辑的作用下,程序会沿着特定的逻辑顺序执行。一般控制逻辑包括有\无条件分支、循环、函数调用等。在正常情况下程序的逻辑非常好理解(代码逻辑不好的程序员都死了。。。) 2017-06-07 代码混淆 Security