跳到主要内容
文章

C已确认:遗留代码的类型安全改造

出版:2002年1月1日 出版历史
  • 获取引文提醒
  • 摘要

    本文提出了一种结合类型推理和运行时检查的方案,以使现有C程序具有类型安全性。我们描述了CCured类型系统,它根据指针类型的用法来分隔指针类型,从而扩展了C的类型。此类型系统允许静态验证其用法为类型安全的指针,以及必须在运行时检查其安全性的指针。我们证明了一个类型可靠性结果,然后我们提出了一个令人惊讶的简单类型推理算法,该算法能够为现有的C程序推断出合适的指针类型。我们使用CCured系统的经验表明,这种推断对于许多C程序来说非常有效,因为它能够推断出大多数或所有指针都是静态可验证的,因此是类型安全的。剩余的指针通过有效的运行时检查进行检测,以确保其安全使用。运行时检查导致的性能损失为0-150%,这比仅使用动态检查的类似方法好几倍。使用CCured,我们发现了已建立的C程序中的编程错误,例如几个SPECINT95基准测试。

    工具书类

    [1]
    M.Abadi、L.Cardelli、B.Pierce和G.Plotkin。静态类型语言中的动态类型。《美国计算机学会编程语言与系统汇刊》,13(2):237-2681991年4月。
    [2]
    T.M.Austin、S.E.Breach和G.S.Sohi。有效检测所有指针和数组访问错误。SIGPLAN通知,29(6):290-3011994年6月。ACM SIGPLAN’94编程语言设计和实现会议记录。
    [3]
    H.-J.Boehm和M.Weiser。在不合作的环境中收集垃圾。软件实践与经验,27:807-8201997年9月。
    [4]
    V.Breazu-Tannen、C.A.Gunter和A.Scedrov。使用胁迫进行计算。在LISP和函数编程中,第44页,第60页,1990年。
    [5]
    L.Cardelli、J.Donahue、L.Glassman、M.Jordan、B.Kalsow和G.Nelson。Modula3报告,1989年。
    [6]
    卡莱尔M.C。Olden:在分布式内存机器上用动态数据结构对程序进行并行化。普林斯顿大学计算机科学系博士论文,1996年6月。
    [7]
    R.Cartwright和M.Pagan。软输入。《91年编程语言设计与实现会议记录》,第278-2921991页。
    [8]
    S.Chandra和T.Reps.C.《ACM SIGPLAN-SIGSOFT软件工具和工程程序分析研讨会论文集》,Softwarv Engeneering Notes(SEN)第24.5卷,第66 75页。ACM出版社,1999年9月6日。
    [9]
    D.埃文斯。动态内存错误的静态检测。ACM SIGPLAN通知,31(5):44 53,1996年。
    [10]
    R.黑斯廷斯和B.乔伊斯。净化:快速检测内存泄漏和访问错误。1992年冬季Usenix技术会议记录,第125 138页,美国加州伯克利,1991年1月。Usenix协会。
    [11]
    F.Henglein。通过类型推理进行全局标记优化。1992年ACM LISP和函数编程会议记录,第205-215页,1992年。
    [12]
    S.Jagannathan和A.Wright。有效的流分析,避免运行时检查。第二届国际静态分析研讨会论文集,第983卷,第207-224页。Springer-Verlag,1995年。
    [13]
    R.W.M.Jones和P.III.J.Kelly。C程序中数组和指针的向后兼容边界检查。AADEBUG,1997年。
    [14]
    S.Kaufer、R.Lopez和S.Pratap。Saber-C:用于C语言的基于解释的编程环境。《夏季Usenix会议记录》,第161-171页,1988年。
    [15]
    A.Kind和H.Friedrich。EuLisp类型推理的实用方法。Lisp和符号计算,6(1/2):159-1761993。
    [16]
    B.灯具。雪松语的描述。技术报告CSL-83-15,施乐帕洛阿尔托研究中心,1983年。
    [17]
    B.Liskov、R.R.Atkinson、T.Bloom、E.B.Moss、R.Schaffert和A.Snyder。CLU参考手册。施普林格-维拉格,柏林,1981年。
    [18]
    A.Loginov、S.Yong、S.IIIorwitz和T.Reps.通过运行时类型检查进行调试。《FACE2001:软件工程的有趣应用》,2001年4月。
    [19]
    H.Patil和C.N.Fischer。使用阴影处理进行高效的运行时监控。《自动和算法调试》,第119-1321995页。
    [20]
    H.Patil和C.N.Fischer。C程序中指针和数组访问的低成本并发检查。软件实践与经验,27(1):87-1101997年1月。
    [21]
    G.Ramalingam、J.Field和F.Tip。聚合结构识别及其在程序分析中的应用。1999年1月,在编程语言原理研讨会上,第119-132页。
    [22]
    D.雷米和a.沃伦。Objective ML:ML的一个简单的面向对象扩展。1997年,《程序设计语言原理研讨会》,第40-53页。
    [23]
    M.Shields、T.Sheard和S.L.P.Jones。动态类型作为阶段类型推理。1998年,在程序设计语言原理研讨会上,第289-302页。
    [24]
    M.Sift、S.Chandra、T.Ball、K.Kunchithapadam和T.Reps.应对C中的类型转换。1999年ACM软件工程基础会议(LNCS 1687),计算机科学讲义第1687卷,第180-198页。Springer-Verlag/ACM出版社,1999年9月。
    [25]
    G.Smith和D.Volpano。计算机程序设计科学,32(13):49-721998,一种方言的声音多态型系统。
    [26]
    规格95。标准绩效评估公司基准。http://www.spee。org/osg/cpu95/UINT951995年7月。
    [27]
    J.L.斯特芬。向可移植C编译器添加运行时检查。软件实践与经验,22(4):305-3161992年4月。
    [28]
    S.Thatte。准静态类型。第17届美国计算机学会程序设计语言原理研讨会(POPL)会议记录,第367-381页,1990年。
    [29]
    D.Wagner、J.Foster、E.Brewer和A.Aiken。自动检测缓冲区溢出漏洞的第一步。2000年2月,网络分布式系统安全研讨会,第1-15页。
    [30]
    A.Wright和R.Cartwright。Scheme的一个实用的软类型系统。1997年UM编程语言和系统汇刊。

    引用人

    查看全部

    索引术语

    1. CCured:传统代码的类型安全翻新
      索引项已通过自动分类分配给内容。

      建议

      评论

      信息和贡献者

      问询处

      发布于

      封面图片ACM SIGPLAN注意事项
      ACM SIGPLAN通知 第37卷第1期
      2002年1月
      342页
      ISSN公司:0362-1340
      EISSN公司:1558-1160
      内政部:10.1145/565816
      期刊目录
      • 封面图片ACM会议
        POPL'02:第29届ACM SIGPLAN-SIGACT编程语言原理研讨会会议记录
        2002年1月
        351页
        国际标准图书编号:1581134509
        内政部:10.1145/503272
      如果复制品不是为了盈利或商业利益而制作或分发的,并且复制品的第一页载有本通知和完整引文,则允许免费制作本作品的全部或部分数字或硬拷贝以供个人或课堂使用。必须尊重ACM以外的其他人对本作品组成部分的版权。允许用信用证进行摘要。要以其他方式复制或重新发布,在服务器上发布或重新发布到列表,需要事先获得特定许可和/或付费。从请求权限[电子邮件保护]

      出版商

      计算机协会

      美国纽约州纽约市

      出版历史

      出版:2002年1月1日
      在SIGPLAN中发布体积37,问题1

      检查更新

      限定符

      • 第条

      贡献者

      其他指标

      文献计量学和引文

      文献计量学

      文章指标

      • 下载量(最近12个月)86
      • 下载次数(最近6周)6

      其他指标

      引文

      引用人

      查看全部
      • (2023)MIFP:用于精确边界检查的选择性脂肪点边界压缩第26届攻击、入侵和防御研究国际研讨会论文集10.1145/3607199.3607212(609-622)在线发布日期:2023年10月16日
      • (2023)全面评估有效保护千万堆栈对象免受内存错误影响2023 IEEE安全开发会议(SecDev)10.1109/秒开发56634.2023.00021(67-74)在线发布日期:2023年10月18日
      • (2022)HWST128型第59届ACM/IEEE设计自动化会议记录10.1145/3489517.3530548(709-714)在线发布日期:2022年7月10日
      • (2022)Morello增强型原型武器体系结构的验证安全性编程语言和系统10.1007/978-3-030-99336-8_7(174-203)在线发布日期:2022年3月29日
      • (2021)利用现有和潜在防御方法进行面向数据攻击的开发技术ACM隐私和安全交易10.1145/346269924:4(1-36)在线发布日期:2021年9月2日
      • (2021)PICO公司ACM架构和代码优化事务10.1145/346043418:4(1-27)在线发布日期:2021年7月17日
      • (2021)SHORE:RISC-V内存安全加速的硬件/软件方法2021年第58届ACM/IEEE设计自动化会议(DAC)10.1109/DAC18074.2021.9586293(289-294)在线发布日期:2021年12月5日
      • (2021)探索反向工程工具为二进制程序提供内存安全的能力和有效性信息安全实践与经验10.1007/978-3-030-93206-0_2(11-31)在线发布日期:2021年12月17日
      • (2020)C的类型推断程序设计语言与系统学报10.1145/342147242:3(1-71)在线发布日期:2020年11月13日
      • (2020)硬件安全的严格工程:CHERI设计和实施过程中的正式建模和证明2020年IEEE安全与隐私研讨会(SP)10.1109/SP40000.2020.00055(1003-1020)在线发布日期:2020年5月
      • 显示更多引用者

      视图选项

      获取访问权限

      登录选项

      完全访问权限

      查看选项

      PDF格式

      以PDF文件查看或下载。

      PDF格式

      电子阅读器

      使用联机查看电子阅读器.

      电子阅读器

      媒体

      数字

      其他

      桌子

      分享

      分享

      共享此出版物链接

      在社交媒体上分享