我想在Clang / llvm中实现Control-Flow Integrity。 (我知道已经实施了前沿CFI)
我的问题是,我从来没有为编译器实现任何东西(我是基于编译器的方法的新手),因此不知道从哪里开始。
对于我的实现,我首先需要获得所有调用的列表(internal =>没有库调用),然后更改函数的结束方式(例如:pop + jmp
而不是ret
)。
有没有人知道从哪里开始,或者即使可以使用插件系统(LibClang,Clang插件,LibTooling)?
提前致谢
答案 0 :(得分:0)
这是一个高级的CCFI: https://bitbucket.org/CCFI/
基于此: http://iot.stanford.edu/pubs/mashtizadeh-ccfi-ccs15.pdf
您可以了解如何将代码添加到每个jmp,call,jmp,ret等等......