G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

渗透技巧 2年前 (2021) admin
756 0 0

最近学编程语言不提Rust都不好意思和别人打招呼了,可是我们这些只会C语言的老程序员怎么办呢?别怕,今天的论文推荐给你介绍一篇将C代码自动化翻译成Rust代码的论文,来自SPLASH 2021 (OOPSLA)

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

本文一开始并没有关注怎么去开发一个新的C语言-Rust语言翻译系统,而是调查了当前工业界和学术界在实现C语言-Rust语言翻译这一目标取得的已有成果,并对存在的问题进行分析。其中作者特别关注了c2rust这个工具( https://c2rust.com ),并调查了该自动化翻译工具在翻译过程中可能会引入unsafety的问题

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

之后,作者才相应地提出了相关技术,通过hook Rust编译器,提取更多的信息,将一些翻译后的存在unsafety状态的代码进行重写,消除其中的不安全内容。

作者首先建立了一个C代码的语料库(corpus),其中部分是c2rust工具手册中已经提到的。

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

然后,作者也简单介绍了一下Rust语言里面的一个特性——允许unsafe code的存在,具体是由具备下列特征的代码引入的:

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

作者对自己的语料库中导致unsafe code的因素进行了统计分析,发现其中最容易引起unsafety的是raw pointer dereference这一特征

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

接下去,作者定量分析了如果要减少翻译后的代码中的unsafe function,主要应该考虑哪几个方面。分析结果表明,要去除一半以上的unsafe function,只需要想办法处理最容易引入unsafety状态的四类特征(raw pointer dereference, memory allocation, extern calls, access to globals)

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

作者在第三章介绍了他们的代码重写技术,针对一个c2rust翻译得到的结果(如下图所示),经过一系列处理后得到了更为安全的代码(具体的细节,小编才疏学浅,请熟悉rust的读者不吝留言评论啊)

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

作者评估了他们提出的技术的优势,可以从下表中看到,他们的重写技术能够消除很大比例的unsafe functions

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

论文页面:
https://dl.acm.org/doi/10.1145/3485498


原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust

版权声明:admin 发表于 2021年12月13日 下午1:48。
转载请注明:G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...