Page 9 - 《软件学报》2024年第6期
P. 9

软件学报 ISSN 1000-9825, CODEN RUXUEW                                        E-mail: jos@iscas.ac.cn
                 Journal of Software,2024,35(6):2585−2607 [doi: 10.13328/j.cnki.jos.007096]  http://www.jos.org.cn
                 ©中国科学院软件研究所版权所有.                                                          Tel: +86-10-62562563



                                                                              *
                 DBI-Go: 动态插桩定位 Go 二进制的非法内存引用

                 陈金宝,    张    昱,    李清伟,    丁伯尧


                 (中国科学技术大学 计算机科学与技术学院, 安徽 合肥 230026)
                 通信作者: 张昱, E-mail: yuzhang@ustc.edu.cn

                 摘 要: Go 语言, 也称   Golang, 由于其语法简单、原生支持并发、自动内存管理等特性, 近年受到很多开发者的欢
                 迎. Go 语言期望开发者不必了解变量或对象是分配在栈上还是在堆中, 而由 Go 编译器的逃逸分析来决定分配位
                 置, 再由 Go 垃圾收集器自动回收无用的堆对象. Go 的逃逸分析必须正确决定对象的分配位置以保证内存状态的
                 正确性. 然而, 目前 Go 社 区中逃逸相关问题频发, 潜在导致程序崩溃等致命问题, 而目前对该方面的研究缺失. 为

                 有效检测编译器生成的代码是否存在可能引起运行时崩溃的非法内存引用, 填补研究空白, 对                             Go 程序执行进行抽
                 象建模, 并提出两条判定写入违例的规则. 基于这两条规则, 克服 Go 二进制中高层语义缺失、运行时信息不便获
                 取等挑战, 设计一个轻量化的分析工具 DBI-Go. DBI-Go 采用静态分析加动态二进制插桩的分析方式, 基于动态二
                 进制分析框架 Pin 来实现, 可以识别 Go 二进制中违例的 store 指令. 实验结果表明, DBI-Go 可以检测出 Go 社区中
                 所有已知的逃逸相关 Issues; DBI-Go 还发现一个目前 Go 社区未知的问题, 该问题已经得到确认. 在实际项目上的
                 应用则表明 DBI-Go 可以帮助开发人员找出逃逸算法的错误. 测试结果还表明                      DBI-Go 采取的措施可以有效降低
                 误报率且在 93.3% 的情况下带来的额外运行时开销小于原先的 2 倍. 同时, DBI-Go 无需修改 Go 的编译运行时, 可
                 以适配不同版本的 Go, 有较高的适用性.
                 关键词: 二进制分析; 动态二进制插桩; 静态分析; Go; 编译器测试; 逃逸分析
                 中图法分类号: TP314

                 中文引用格式: 陈金宝, 张昱, 李清伟, 丁伯尧. DBI-Go:  动态插桩定位  Go  二进制的非法内存引用 . 软件学报 , 2024, 35(6):
                 2585–2607. http://www.jos.org.cn/1000-9825/7096.htm
                 英文引用格式: Chen JB, Zhang Y, Li QW, Ding BY. DBI-Go: Dynamic Binary Instrumentation for Pinpointing Illegal Memory
                 References in Go Binaries. Ruan Jian Xue Bao/Journal of Software, 2024, 35(6): 2585–2607 (in Chinese). http://www.jos.org.cn/1000-
                 9825/7096.htm

                 DBI-Go: Dynamic Binary Instrumentation for Pinpointing Illegal Memory References in Go
                 Binaries
                 CHEN Jin-Bao, ZHANG Yu, LI Qing-Wei, DING Bo-Yao
                 (School of Computer Science and Technology, University of Science and Technology of China, Hefei 230026, China)
                 Abstract:  The  Go  programming  language,  also  known  as  Golang,  has  become  popular  with  developers  in  recent  years  due  to  its  simple
                 syntax,  native  support  for  concurrency,  and  automatic  memory  management.  This  language  expects  that  developers  do  not  need  to  know
                 whether  variables  or  objects  are  allocated  on  the  stack  or  in  the  heap.  The  escape  analysis  of  the  Go  compiler  determines  the  allocation
                 location,  and  then  the  garbage  collector  automatically  recycles  unreachable  heap  objects.  Go’s  escape  analysis  must  correctly  determine  the
                 allocation  location  of  the  object  to  ensure  the  memory  state  correctness.  However,  escape  analysis  related  problems  frequently  occur  in  the
                 Go  community  at  present,  potentially  causing  fatal  problems  such  as  program  crashes,  and  there  is  currently  a  lack  of  research  on  this


                 *    基金项目: 国家自然科学基金 (62272434)
                  本文由“编译技术与编译器设计”专题特约编辑冯晓兵研究员、郝丹教授、高耀清博士、左志强副教授推荐.
                  收稿时间: 2023-09-10; 修改时间: 2023-10-30; 采用时间: 2023-12-14; jos 在线出版时间: 2024-01-05
                  CNKI 网络首发时间: 2024-03-23
   4   5   6   7   8   9   10   11   12   13   14