×

支持指针算法和未初始化数据的内存模型的验证CompCert前端。 (英语) Zbl 1465.68041号

概要:CompCert C编译器保证目标程序的行为与源程序相同。然而,没有定义语义的源程序无法从这一保证中受益,因此可能会被错误编译。为了减少错误编译的可能性,我们提出了一种新的CompCert内存模型,该模型为具有挑战性的特征(如按位指针算术和访问未初始化数据)提供了定义的语义。我们从理论和实验两方面评估了我们的记忆模型。在我们的实验中,我们发现了普遍存在的低级C习惯用法,这些习惯用法需要我们的内存模型提供额外的表达能力。我们还表明,我们的内存模型可以证明包含了现有的CompCert内存模型,从而交叉验证了这两种语义。我们的记忆模型依赖于以下核心概念符号价值标准化符号值对延迟计算进行建模,如果可能,将符号值归一化为真正的值。我们展示了如何驯服规范化的表达能力,以便记忆模型符合CompCert的证明框架。我们还调整了CompCert前端执行的编译器传递正确性证明,从而证明我们的模型非常适合证明编译器转换。

MSC公司:

68N20型 编译与解释理论
68问题55 计算理论中的语义学
PDF格式BibTeX公司 XML格式引用
全文: 内政部 哈尔

参考文献:

[1] Leroy,X.:真实编译器的形式化验证。Commun公司。ACM 52(7),107-115(2009)·doi:10.1145/1538788.1538814
[2] Jourdan,J.、Laporte,V.、Blazy,S.、Leroy,X.、Pichardie,D.:经正式验证的C静态分析仪。摘自:POPL(2015)。doi:10.1145/2676726.2676966
[3] Clements,A.T.、Kaashoek,M.F.、Zeldovich,N.、Morris,R.T.、Kohler,E.:可伸缩交换性规则:为多核处理器设计可伸缩软件。包含:SOSP。ACM(2013)
[4] Wang,X.,Chen,H.,Cheung,A.,Jia,Z.,Zeldovich,N.,Kaashoek,M.:未定义的行为:我的代码发生了什么?摘自:APSYS’12(2012)
[5] Leroy,X.,Appel,A.W.,Blazy,S.,Stewart,G.:CompCert内存模型。In:认证编译器的程序逻辑。剑桥大学出版社(2014)。http://hal.iria.fr/hal-00905435 ·Zbl 1298.68009号
[6] Leroy,X.,Blazy,S.:类C内存模型的形式化验证及其用于验证程序转换。J.汽车。原因。41(1), 1-31 (2008) ·兹比尔1154.68039 ·doi:10.1007/s10817-008-9099-0
[7] Besson,F.、Blazy,S.、Wilke,P.:Coq开发的伴侣网站。http://www.irisa.fr/celtique/ext/frontend-symbolic(网址:http://www.irisa.fr/celtique/ext/frontend-symbolic)
[8] ISO:C标准1999。技术报告,ISO(1999)。http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
[9] Leroy,X.:经过正式验证的编译器后端。J.汽车。原因。43(4), 363-446 (2009). doi:10.1007/s10817-009-9155-4·Zbl 1185.68215号 ·doi:10.1007/s10817-009-9155-4
[10] MIRA Ltd:MISRA-C:2004关键系统中C语言使用指南(2004)。网址:www.misra.org.uk
[11] Kang,J.、Hur,C.K.、Mansky,W.、Garbuzov,D.、Zdancewic,S.、Vafeiadis,V.:支持整数点投射的正式C内存模型。输入:PLDI。ACM(2015)
[12] de Moura,L.M.,Björner,N.:Z3:高效SMT求解器。收录:TACAS,LNCS,第4963卷。施普林格(2008)
[13] Barrett,C.、Conway,C.L.、Deters,M.、Hadarean,L.、Jovanović,D.、King,T.、Reynolds,A.、Tinelli,C.:计算机辅助验证:2011年第23届国际会议,CAV 2011,美国犹他州雪鸟,2011年7月14-20日。会议记录,第CVC4章,第171-177页。施普林格,柏林,海德堡(2011)。10.1007/978-3-642-22110-1_14
[14] Lee,D.:内存分配器。http://gee.cs.oswego.edu/dl/html/malloc.html
[15] Bernstein,D.J.,Lange,T.,Schwabe,P.:新密码库的安全影响。收录于:LATINCRYPT’12,LNCS,第7533卷,第159-176页。施普林格(2012)·Zbl 1303.94067号
[16] Yang,X.,Chen,Y.,Eide,E.,Regehr,J.:发现和理解C编译器中的错误。输入:PLDI。ACM(2011)
[17] Blazy,S.:验证\[C.in:C/C++验证工作坊的形式语义的实验。奈梅亨拉布大学报告ICIS-R07015(2007)
[18] ISO:C标准2011。技术报告,ISO(1999)。http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf
[19] Norrish,M.:C在HOL中正式化。剑桥大学博士论文(1998年)
[20] Tuch,H.、Klein,G.、Norrish,M.:类型、字节和分离逻辑。输入:POPL。ACM(2007)·Zbl 1295.68094号
[21] Cohen,E.,Moskal,M.,Tobies,S.,Schulte,W.:C.ENTCS 254的精确而高效的内存模型(2009)
[22] Cohen,E.、Dahlweid,M.、Hillebrand,M.A.、Leinenbach,D.、Moskal,M.,al.:VCC:验证并发C的实用系统。In:TPHOL,LNCS,第5674卷。施普林格(2009)
[23] Greenaway,D.,Andronick,J.,Klein,G.:弥合差距:C的自动验证抽象。In:ITP,LNCS,第7406卷。施普林格(2012)·Zbl 1360.68751号
[24] Greenaway,D.、Lim,J.、Andronick,J.和Klein,G.:不要为小事操心:不费吹灰之力地对C代码进行正式验证。输入:PLDI。ACM(2014)
[25] Ellison,C.,Rošu,G.:C与应用程序的可执行形式语义。输入:POPL。ACM(2012年)
[26] Hathhorn,C.,Ellison,C.,Rošu,G.:定义C.的不确定性。In:第36届ACM SIGPLAN编程语言设计与实现会议论文集(PLDI’15),第336-345页。ACM(2015)。doi:10.1145/2813885.2737979
[27] Blazy,S.,Leroy,X.:C语言的clight子集的机械化语义。J.汽车。原因。43(3) (2009) ·Zbl 1185.68136号
[28] Bedin França,R.、Blazy,S.、Favre-Felix,D.、Leroy,X.、Pantel,M.、Souyris,J.:在基于ACG的飞行控制软件中正式验证优化编译。参见:ERTS2(2012)。https://hal.inia.fr/hal-00653367
[29] Krebbers,R.,Leroy,X.,Wiedijk,F.:形式C语义:Compcert和C标准。收录于:ITP 2014,LNCS,第8558卷。斯普林格(2014)
[30] Krebbers,R.:C.in:POPL中非决定论和序列点的操作性和公理化语义。ACM(2014)·Zbl 1284.68404号
[31] Krebbers,R.:Coq中形式化的C11重叠限制。收录于:CPP,LNCS,第8307卷。施普林格(2013)。doi:10.1007/978-3-319-03545-14·Zbl 1426.68055号
[32] Carbonneaux,Q.,Hoffmann,J.,Ramananandro,T.,Shao,Z.:C程序堆栈空间边界的端到端验证。摘自:PLDI’14,第30页。ACM(2014)
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。