你们都懂LLVM
大致看了下。Function重命名需要判断是否为declaration,我似乎没看到这部分代码。
参见我的博客 http://mayuyu.io/2017/06/02/LLVMHacking-0x1/
不懂,看起来是分享,我给换了下类别。
先赞,后看。
你需要实现的常量文本加密的话我这边用的做法是把原来的GV CDA替换成加密的然后在所有的Instrution类User那里插入allocainst后解密
当然我不清楚GCC那边啥样所以不过是我个人意见而已
Hi Akko,
搜索到大大的7天精通llvm代码混淆系列 orz
- 我对OC不熟悉,还得向大大们学习 我的主要方向是静态分析,例如检查memset调用时的空引用解析 LLVM后端,例如AVR芯片
- 我对”CFG的混淆“持观望态度:应该有benchmark对比CFG混淆后影响ELF尺寸、性能等问题。
期待大大们的反馈,谢谢!
Regards,
Leslie Zhai - a LLVM developer
拜读~
GCC v4.6之后(可能更早一点的版本)支持插件了 LLVM PASS还得放在llvm/lib/Transforms/下,可能我不够深入,DragonEgg就是一个GCC插件,目前完成了GCC Frontend → GIMPLE → LLVM IR的”翻译“ LLVM Weekly - #190, Aug 21st 2017
你说的都没错。但目前混淆的目的就是为了拿体积和性能换攻击者的开销
我不大看得懂,我认识的好多人也看不懂LLVM相关的东西。楼主作为一个LLVM developer,能否用相对直白的语言,发一系列帖子,来介绍一下LLVM和相关的一些概念,如LLVM在开发中的应用等,作一个科普教育呢?
我想对我等LLVM小白来说,应该是非常受用的。
Anyway,谢谢楼主的分享!
就是F.empty()
IR的函数分为declaration和definition
前者代表实现在当前TU外部由IR的Linker或者目标文件的Native Linker查找。这种函数你重命名了找不到当然就会崩
Kaleidoscope过一遍就差不多知道了
然后控制流平坦化这里好像LLVM自带一个Pass了?在Transforms/Utils里面
感谢 https://github.com/llvm-mirror/llvm/blob/master/lib/Transforms/Utils/FlattenCFG.cpp
哈哈 我follow了你的github
yEP
然后ir层玩完了也可以搞Platform-Specific的MachineFunctionPass
EDIT: 我已经移除了你论坛账户的新用户限制