×

跟踪编译器的正确性和安全编译。 (英语) Zbl 1508.68046号

Müller,Peter(编辑),《编程语言和系统》。2020年4月25日至30日在爱尔兰都柏林举行的第29届欧洲编程研讨会(ESOP 2020),是欧洲软件理论与实践联合会议(ETAPS 2020)的一部分。诉讼程序。查姆:斯普林格。莱克特。注释计算。科学。12075, 1-28 (2020).
摘要:编译器正确性以最简单的形式定义为将已编译程序的跟踪集包含到原始程序的跟踪集中,这相当于保留所有跟踪属性。例如,在这里跟踪收集每个执行的外部可观察事件。然而,这个定义要求源语言和目标语言的痕迹集完全相同,而当语言相距甚远或观察结果细粒度时,情况并非如此。为了克服这个问题,我们研究了一个广义的编译器正确性定义,它使用从潜在不同的集合中提取并通过任意关系连接的源和目标跟踪。我们开始了解当用跟踪上的非平凡关系实例化时,这个广义编译器正确性定义为我们提供了什么保证。当此跟踪关系不相等时,将无法再保持源程序的跟踪属性不变。相反,我们通过正确编译满足给定源属性的程序来确保目标跟踪属性的通用特征,同时还提供源跟踪属性的双重特征,即为了获得编译代码的特定目标属性,需要显示源跟踪属性。我们表明,这种关于编译器正确性的观点可以自然地解释未定义的行为、资源耗尽、不同的源和目标值、副通道以及各种抽象不匹配。最后,我们表明,同样的泛化也适用于许多安全编译定义,这些定义描述了对已编译程序的链接对抗代码的保护。
关于整个系列,请参见[Zbl 1496.68030号].

MSC公司:

68N20型 编译与解释理论
PDF格式BibTeX公司 XML格式引用

参考文献:

[1] M.Abadi、A.Banerjee、N.Heintze和J.G.Riecke。依赖关系的核心演算。POPL公司, 1999.
[2] C.Abate、R.Blanco、D.Garg、C.Hriţcu、M.Patrigani和J.Thibault。超越完全抽象的旅程:探索用于安全编译的健壮属性保护。CSF公司, 2019.
[3] A.Ahmed、D.Garg、C.Hriţcu和F.Piessens。安全汇编(18201年达格斯图尔研讨会)。达格斯图尔报告, 8(5), 2018.
[4] A.Anand、A.Appel、G.Morrisett、Z.Paraskevopoulou、R.Pollack、O.S.Belanger、M.Sozeau和M.Weaver。CertiCoq:一个经过验证的Coq编译器。CoqPL研讨会,2017年。
[5] K.Backhouse和R.Backhouse。通过逻辑关系和伽罗瓦联系,免费提供抽象解释的安全性。计算机程序设计科学, 51(1-2), 2004. ·Zbl 1091.68069号
[6] G.Barthe、B.Grégoire和V.Laporte。安全编译副通道对策:加密“恒定时间”的情况。CSF公司, 2018.
[7] L.Beringer、G.Stewart、R.Dockins和A.W.Appel。已验证共享内存C的编译。员工持股计划, 2014. ·Zbl 1346.68045号
[8] F.Besson、S.Blazy和P.Wilke。支持指针算法和未初始化数据的内存模型的验证CompCert前端。自动推理杂志, 62(4), 2019. ·Zbl 1465.68041号
[9] S.Boldo、J.Jourdan、X.Leroy和G.Melquiond。已验证浮点计算的编译。自动推理杂志, 54(2), 2015. ·Zbl 1331.68047号
[10] M.Busi、P.Degano和L.Galletta。安全属性的翻译验证。CoRR公司,abs/1901.050822019年。
[11] Q.Cao、L.Beringer、S.Gruetter、J.Dodds和A.W.Appel。VST-Floyd:一种用于验证C程序正确性的分离逻辑工具。自动推理杂志,61(1-4),2018年·Zbl 1451.68169号
[12] Q.Carbonneaux、J.Hoffmann、T.Ramananandro和Z.Shao。C程序堆栈空间边界的端到端验证。PLDI公司, 2014.
[13] C.辛巴努。微软:70%的安全漏洞都是内存安全问题。ZDNet,2019年。
[14] M.R.Clarkson和F.B.Schneider。超属性。JCS公司, 18(6), 2010.
[15] P.库索特。通过抽象解释对过渡系统的语义层次进行构造性设计。TCS(牵引力控制系统), 277(1-2), 2002. ·Zbl 0996.68119号
[16] P.库索和R.库索。抽象解释:通过构造或近似不动点对程序进行静态分析的统一格模型。POPL公司, 1977.
[17] V.D’Silva、M.Payer和D.X.Song。编译器优化中的正确性与安全性差距。标准普尔研讨会, 2015.
[18] J.恩格尔弗里特。确定性意味着(观测等效=迹线等效)。TCS(牵引力控制系统), 36, 1985. ·Zbl 0571.68018号
[19] 过程代数安全性质的分类。JCS公司, 3(1), 1995.
[20] P.H.Gardiner、C.E.Martin和O.De Moor。谓词变换器的代数结构。计算机程序设计科学, 22(1-2), 1994. ·Zbl 0807.18003号
[21] R.Giacobazzi和I.Mastroeni。抽象无干扰:削弱信息流的统一框架。ACM隐私和安全交易, 21(2), 2018.
[22] J.A.Goguen和J.Meseguer。安全策略和安全模型。标准普尔1982年。
[23] R.Gu、Z.Shao、J.Kim、X.N.Wu、J.Koenig、V.Sjöberg、H.Chen、D.Costanzo和T.Ramanandro。认证的并发抽象层。PLDI公司, 2018.
[24] I.Haller、Y.Jeon、H.Peng、M.Payer、C.Giuffrida、H.Bos和E.van der Kouwe。TypeSan:实用的类型混淆检测。CCS系统, 2016.
[25] 心跳加速。心跳虫。http://hearthleed.com网站/, 2014.
[26] C.Hriţcu、D.Chisnall、D.Garg和M.Payer。安全编译。SIGPLAN PL Perspectives博客,2019年。
[27] C.Hur和D.Dreyer。ML和汇编之间的Kripke逻辑关系。POPL公司, 2011. ·Zbl 1284.68148号
[28] A.Jeffrey和J.Rathke。Java Jr:核心Java语言的完全抽象跟踪语义。员工持股计划, 2005. ·Zbl 1108.68349号
[29] J.Kang、C.Hur、W.Mansky、D.Garbuzov、S.Zdancewic和V.Vafeiadis。支持整数指针类型转换的正式C内存模型。PLDI公司, 2015.
[30] J.Kang、Y.Kim、C.-K.Hur、D.Dreyer和V.Vafeiadis。单独编译的轻量级验证。POPL公司, 2016. ·Zbl 1347.68085号
[31] L.Lamport和F.B.Schneider。规范和验证的正式基础。分布式系统:规范的方法和工具,高级课程, 1984.
[32] C.拉特纳。每个C程序员都应该知道的关于未定义行为的知识#1/3。LLVM项目博客,2011年。
[33] X.勒罗伊。真实编译器的形式验证。CACM公司, 52(7), 2009.
[34] X.勒罗伊。经过正式验证的编译器后端。1月, 43(4), 2009. ·Zbl 1185.68215号
[35] X.勒罗伊。编译器的正式验证(2017年DeepSpec暑期学校),2017年。
[36] I.Mastroeni和M.Pasqua。验证有界子闭超属性。SAS公司, 2018.
[37] J.McCarthy和J.Painter。编译器对算术表达式的正确性。计算机科学的数学方面11967年,《应用数学专题讨论会论文集》第19期·Zbl 0183.19201号
[38] A.Melton、D.A.Schmidt和G.E.Strecker。伽罗瓦关系和计算机科学应用。范畴理论与计算机程序设计教程和研讨会论文集, 1986. ·Zbl 0622.06004号
[39] 米尔纳,R.:通信系统微积分。斯普林格·弗拉格,柏林,海德堡(1982)。
[40] R.Milner和R.Weyhrauch。用机械化逻辑证明编译器的正确性。《机器智能》第7卷第7届年度机器智能研讨会论文集, 1972. ·Zbl 0259.68008号
[41] F.L.Morris。关于构造编译器并证明其正确性的建议。POPL公司, 1973. ·Zbl 0309.68026号
[42] E.Mullen、D.Zuniga、Z.Tatlock和D.Grossman。已验证CompCert的窥视孔优化。PLDI公司, 2016.
[43] D.A.Naumann博士。高阶命令式编程的范畴模型。计算机科学中的数学结构, 8(4), 1998. ·Zbl 0916.68095号
[44] D.A.Naumann和M.Ngo。何处规范为程序。统一程序设计理论国际研讨会施普林格,2019年·Zbl 07168633号
[45] G.Neis、C.Hur、J.Kaiser、C.McLaughlin、D.Dreyer和V.Vafeiadis。Pilsner:一种用于高阶命令式语言的经过组合验证的编译器。ICFP公司, 2015. ·Zbl 1360.68350号
[46] M.Pasqua和I.Mastroeni。关于(超)属性的拓扑。CEUR公司, 2017. ·Zbl 1420.68113号
[47] 帕特里格纳尼先生。为什么每个人都应该使用颜色?或者,2020年超越代码段的语法突出显示。
[48] M.Patrignani和D.Clarke。保护模块架构的完全抽象跟踪语义。计算机语言、系统和结构, 42, 2015. ·Zbl 1387.68054号
[49] M.Patrignani和D.Garg。安全编译和超属性保护。CSF公司, 2017.
[50] M.Patrignani和D.Garg。稳健安全的编译。员工持股计划, 2019.
[51] D.Patterson和A.Ahmed。接下来的700个编译器正确性定理(函数珍珠)。PACMPL公司2019年3月3日(ICFP)。
[52] T.Ramanandro、Z.Shao、S.Weng、J.Koenig和Y.Fu。用于验证独立编译和链接的组合语义。清洁石油产品, 2015.
[53] J.雷格尔。C和C++中未定义行为的指南,第3部分。嵌入学术博客,2010年。
[54] A.Sabelfeld和D.Sands。解密的维度和原则。CSFW公司, 2005.
[55] A.Sabry和P.Wadler。对call-by-value的反思。程序设计语言与系统学报, 19(6), 1997. ·Zbl 1345.68086号
[56] J.Sevcík、V.Vafeiadis、F.Z.Nardelli、S.Jagannathan和P.Sewell。CompCertTSO:一个经过验证的编译器,用于松弛内存并发。美国临床医学杂志, 60(3), 2013. ·Zbl 1281.68072号
[57] G.Stewart、L.Beringer、S.Cuellar和A.W.Appel。成分CompCert。POPL公司, 2015. ·Zbl 1346.68056号
[58] Y.K.Tan、M.O.Myreen、R.Kumar、A.Fox、S.Owens和M.Norrish。已验证的CakeML编译器后端。函数编程杂志, 29, 2019. ·Zbl 1493.68091号
[59] X.Wang、H.Chen、A.Cheung、Z.Jia、N.Zeldovich和M.F.Kaashoek。未定义的行为:我的代码发生了什么?APSYS公司, 2012.
[60] X.Wang、N.Zeldovich、M.F.Kaashoek和A.Solar Lezama。面向优化安全系统:分析未定义行为的影响。SOSP(标准操作程序), 2013.
[61] Y.Wang、P.Wilke和Z.Shao。一种基于抽象堆栈的方法,用于验证机器代码的组合编译。PACMPL公司2019年3月3日(POPL)。
[62] L.Xia、Y.Zakowski、P.He、C.Hur、G.Malecha、B.C.Pierce和S.Zdancewic。交互树:在Coq中表示递归和不纯程序。PACMPL公司,2020年4月4日。
[63] A.Zakinthinos和E.S.Lee。安全属性的一般理论。标准普尔, 1997.
[64] J.Zhao、S.Nagarakatte、M.M.K.Martin和S.Zdancewic。规范化验证程序转换的LLVM中间表示。POPL公司, 2012. ·Zbl 1321.68207号
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。