2024年4月16日发(作者:)

__________________________________________________________________________________________________

/021

年第

4

理论研究

doi

1

0.3969/.1671-1

122.2021.04.01

0

/

-----------------------

N0TINFO

SECURITY

轻量级嵌入式软件动态二进制插桩算法

----------------------

梁晓兵

1,

孔令达

1,

刘岩

1,

叶莘

2

---------------------------------

(1

.中国电力科学研究院有限公司计量研究所

北京

100085;

2

.国网浙江省电力有限公司营销服务中心

杭州

310007

)

软件二进制插桩是软件性能分析

漏洞挖掘

质量评价领域的关键技术

在嵌入式环境下

传统动态插桩算法受到无操作系统

CPU

架构复杂

内存资源紧张

等局限

难以展开工作

文章以软件动态二进制插桩算法为研究目的

通过静态特征

分析和动态跟踪算法

引入图论算法对固件中的二进制进行分析

提出了嵌入式设备

远程调试协议

实现了对软件运行时信息的获取

与传统方案相比

文章所想方案解

决了现有工具对源码

操作系统或

CPU

架构的依赖

同时显著降低了内存和运算资源

的占用率

可以有效解决嵌入式设备的动态插桩问题

关键词

软件插桩

二进制插桩

软件调试

控制流分析

中图分类号

TP309

文献标志码

A

文章编号

1671-1122

(2021)

04-0089-07

中文引用格式

:梁晓兵

孔令达

刘岩

等.轻量级嵌入式软件动态二进制插桩算法

[J].

信息网络安全

2021,

21

(4

)

89-95.

英文引用格式:

LIANG

Xiaobing,

KONG

Lingda,

LIU

Yan,

et

al.

Lightweight

Dynamic

Binary

Instrumentation

Algorithm

for

Embedded

Software[J].

Netinfo

Security,

2021,21(4):

89-95.

Lightweight

Dynamic

Binary

Instrumentation

Algorithm

for

Embedded

Software

LIANG

Xiaobing

1

,

KONG

Lingda

1

,

LIU

Yan

1

,

YE

Xin

2

(1.

Institute

of

Metrology,

China

Electric

Power

Research

Institute Co.

f

Ltd.,

Beijing

100085,

China;

2.

Marketing

Service

Center,

State

Grid

Zhejiang

Electric

Power

Co.,

Ltd.,

Hangzhou,

310007,

China)

Abstract:

Binary

instrumentation

is

a

key

technology

in

the

fields

of

software

performance

analysis,

vulnerability

mining,

and

quality

evaluation.

When

working

on

the

embedded

environment,

traditional

dynamic

instrumentation

algorithms

are

facing

limitations

like

lacking

operating

system,

complex

CPU

architecture,

and

tight

memory

resources.

Those

limitations

make

binary

instrumentation

on

embedding

software

extremely

difficult.

Therefore,

this

paper

studies

the

lightweight

binary

dynamic

instrumentation

technology,

and

realizes

the

acquisition

of

software

runtime

information

through

static

feature

analysis

and

dynamic

tracking

algorithms.

Graph-based

algorithms

and

embedded-oriented

remote

debugging

protocol

are

introduced

as

well.

Compared

with

the

traditional

solution,

the

solution

in

this

article

solves

the

dependence

on

source

code,

operating

system

or

CPU

architecture,

while

significantly

reducing

the

occupancy

收稿日期:

2020-12-03

基金项目

:国家电网有限公司总部科技项目

[5600-201955458A-0-0-00]

作者简介

梁晓兵

1978

,

男,河南

高级工程师

博士

主要研究方向为信息妥全

孔令达

1990

,

黑龙江

工程师

硕士,

主要研究方向为电表质量分析

软件安全;

刘岩

1982

,

山东

,高级工程师

硕士

主要研究方向为智能量测

叶莘

1991

),

浙江

工程师

硕士

,主要研究方向为嵌入式妥全

通信作者

孔令达

****************

89

n

C

tinfo

security

理论研究

2021

年第

4期

__________________________________________________________________________________________________

rate

of

memory

and

computing

resources.

Therefore

dynamic

binary

instrumentation

work

can

be

effectively

solved.

Key

words:

software

instrumentation;

binary

instrumentation;

software

debugging;

binary

analysis

0

引言

软桩是一种软件运行时状态分析技术

广泛

应用于软件质量评价

1

漏洞挖掘

2

性能分析与优化

3

等领域中

是解决软件执行路径收集

关键函数调用

分析

4

等问题的主要手段

过去对软件插桩算法的研

究主要是基于

PC

软件展开

PF

近年来

随着嵌入式

设备的质量评价和安全检查越来越受到重视

基于嵌

川软件的插桩算法也成为了关注的重点帆

在以往研究中

软件插桩主要有源码插桩和二进

制插桩两种实现方式:

1

源码插桩

该施在编译阶段修改程序源码,

在其中插入调试代码

以实现软件运行时的信息获

5

该方法对软件源码

语言和编译环境有很强的

2

a

制插桩

该方法通过对二进制文件中汇编

指令的分析

在汇编指令序列中插入

桩点

然后执

行指令序列并触发

从而获取运行时信息

其中

行过程中由另一进程或设备动态监听的插桩过程称为

动态插桩

在嵌入式环境下

动态插桩是最常用的软

现有动态插桩工具主要有

PinP

DynamoRIO

Dynins0

Pin

使用状态机的思想

以目标程序的二

进制指令作为输入

动态翻译为新的指令序列并执行,

在此过程中收集运行时信息

;

DynamoRIO

将目标程序

的二

3

制指令拷贝在内存中

以基本块为单位动态读

取指令并执行

,从而控制程序的执行过程

a

上述动态插桩方案都涉及对二进制指令的动态读

取和翻译

该方案的好处是灵活性较高,

可以支持各

种场景的插桩任务

;

但是对内存

CPU

资源的占用较

。在资源紧张的嵌入式环境中

如果插桩进程占用

过多资源

可能会导致原有软件无法正常执行

从而

无法展开后续的软件测试等任务

此外

现有工作往

往依赖特定操作系统或硬件环境

例如

Pin

只支持在

Intel

架构的

CPU

上工作

;

DynamoRIO

工作时依赖操作

系统的

API,

在趣作系统的嵌入式设备中无法工作

由于以上困难

目前在嵌入式设备中进行软件插

桩的解决方案非常少

E

"I

等人通过在指令集仿真

QEMU

上实现了对嵌入式软件的动态插桩

该方案

利用

QEMU

模拟嵌入式硬件设备中的

CPU

RAM

断控制器等全部硬件

并在二进制翻译过程中获取相

应动态信息

该方案对于能够被

QEMU

完全模拟的软

件效果良好

但其可靠性依赖于

QEMU

对硬件设备的

模拟

在实际工作中

很多硬件中的设备

尤其是传

感器等输入输出设备难以被软件完全模拟

此时该方

gfc

®

以生效

为了解决上述问题

本文提出了一个轻量级的动

态插桩解决方案

避免使用传统方案中动态二进制翻

译的手段

同时又能在无源码

操作系统

指令集依

赖的条件下完成对运行时信息的动态获取

本文畑

二进制文件的静态分析出发

分析了二

a

制文件指令

流中的特征点

同时设计了断点调试协议

实现运行

时的动态调试

从而远程获取程序中的运行时信息

1

总体设计

本文所述算法的主要思想是利用断点调试协议实

现插桩调试功能

。为了跟踪动态执行过程和获取运行

时信息

邂了远断点的触轴行监控

为确定断点插入的位置

设计了静态分析算法以实现

对控制流图和桩点集合的计算

因此

本文的工作流程分为以下两个阶段

1

静齣析阶段

该阶段中完成对桩点位置的分析

从嵌入式设备

中提取固件

并对目标二

a

制文件进行特征收集和反

汇编

接着

通过程序指令流和入口点构造程序的控

N0TINFO

SECURITY

__________________________________________________________________________________________________

2021

年第

4

理论研究

制流图

最终完成桩点地址的计算

2

)

动态插桩与监控

该阶段中完成软件运行时信息的获取

基于静

态分析输出的桩点文件

监控进程通过断点调帥议

连接到被测进程

并通过断点的触麵控程序执行的

过程

2

静态分析

2.1

特征收集与反汇编

特征收集指对二进制目标的文件格式

指令集

字长

指令分区

大小端序等目标信息的采集

ELF

文件为例,

MWffi

是文洋部的前

4

个鬥为

7ffiLF

,

其下按照

ELF

头畴式依次记录了文件的字长

、指令集

段表

(

section

header

table

)

地址⑴

通过收集这些特征,

算法能够将源程序进行分块

并在逻辑上对目标卫

制程序进行抽象。

.symtab

.dynsym

段中分另

|记录了

静态链接信息和动态链接信息

从中读取文件中函数

的地址和长度

可以构造函数表

F,

作为函数级插桩的

依据

.text

段中记录了指令的机器码,通过反汇编过

程得到特征分析

控制流图构建和动态插桩的输入

反汇编过程将原始二

S

制程序中的机器码抽象为

指令流序列

嵌入式设备中常用的

RISC

架构具有定长

指令

,寻址方式和指令格式较少

降低了反汇编工作

的复杂程度

值得注意的是

ARM

指令集下的机器码

中除了常用的

32

位或

64

位指令

同时存在更精简的

16

Thumb

指令

在反汇编过程中需要动态判断

ARM

设备的当前工作模式

以保证指令的正确翻译

机器码的反汇编可以使用一些成熟的工具来完成

Capstone^]

2.2

特征分析

控制流图是表示二®制程序执行流程与执行顺序

的图结构

用于描述程序中指令间的跳转关系

控制

流图能够表现二进制指令的静态结构特征

其中的节

点为原始指令流中的分支指令

标识了程序运行过程

中执行路径的最小分割

在插桩过程中

由于桩点需

要覆盖所有可能的执行路径

因此将桩点设置在控制

流图节点对应的分支语句前后

可以保证对执行过程

的覆盖

根据以上思想,

对静态分析过程中收集的信息进

行以下形式定义

定义

1

指令

指令

Ins=(pp,len,S,F)

为四元组

其中

qp

标识指令类别

fen

表示指令长度

集合

S

表示加所

有合法的下一条指令

F

表示指令所在的函数

定义

2

指令流与基本块指令流

P=Insi,Ins

2

,-",Ins„

为由指令组成的列表

特别地

满足

Vie[l,

],s

逐的.

S)W1

的指令流称为基本块

记作爲

定义

3

控制流图控制流图

CFG=(KE)

由指令流

P

对应的有向图

其中

7

表示控制流图中的节点

数量为"

且满足

V={J

r,J2

,-MJQP},

E

表示控制流

图中的边

对应着程序执行过程中的分支方向

圧荷急

,

e

|e

=(

J

s,J

t

),1

W

s.t

W

m

}

o

基于以上定义

给出计算对应的控制流图和桩点

集合的算法

算法

1

桩点生輔:法

输入

原指令流

P,

程序入口点

Entry

输出

控制流图

CFG,

桩点集合

R

Begin

Initialize

CFGCV^}^!}),

R={},J=[]

Initialize

insSet=[Entiy],insBlockM^

)

={}

While

not

empty(insSet):

ins=^popFront(insSef)

While

size(ins.S)<=l:

(ins),

insBlockM^

)

[ms]=J

IfhasKey(msBlockM^

)

,

ins.S[0]):

Break

ins=ins.S[0]

Else:

If

size(ins.S)>l:

(ms)

Vinsert(J)

Forsinins.S:

If

Not

hasKey(insBlockMap

}

s):

insSet

appends)

Else:

((J,

insBlockMap[s])

End

该算法的基本思想是首先选取单元素集合

insSet

表示所有当前控制流图能够访问到的节点

其初值为

n

C

tinfo

SECURITY

理论研究

2021

年第

4期

__________________________________________________________________________________________________

程序入口点

Entoy

然后对

insSet

应用广度优徳索算法,

循环查找其中每个节点能够访问的节点

并更新控制

流图中的节点和边

对于控制流图中的分支节点

其中至少包含

2

条语句

说明该节点覆盖了

~基本块,

则在点对应的®^前后

Si

己信息

由此

通过特征收集过程中收集的指令流

执行

以上算法计算控制流图和桩点集合

得到执行路径收

集所需的桩点地址

将该集合以三元组(桩点地址,

指令)的格站储

得到血信息文件

3

动态插桩

3.1

断点调试协议

为了监控程序中的断点

需要通过调试接口与嵌

心设备连接

其接口的等价通讯原语如表]所示

CONNECT

DISCONNECT

原语在逻辑上表示对某

个进程或设备调试的开始与结束

;

WMT

CONTINUE

原语在逻辑上控制进程或设备的执行过程

;

其綁试

接口控制对数据的读写

1

动态插桩调试接口原语

原语

含义

CONNECT

建立连接并开始监听

WAIT

等待断点触发

CONTINUE

从断点处继续执行

GET

REGS

读取寄存器

GET_MEMORY

读取内存

SET

MEMORY

写入内存

DISCONNECT

结束监听并断开连接

对于无操作系统的嵌入式设备

若其芯片带有

SWD

JIhg

等协议的调试接口

则可以通过相应调试

协议读取寄存器和内存

通过读取

CPU

状态(如

ARM

架构下读取程序状态寄存器

PSW

的值问)来判断断点

的址

T^ffiLinux

操作系统的设备

则可以调用

Linux

中的

Ptrace

系统调用监听测试进程

Ptace

Linux

系统

提供给用户层的调试接口

提供附着

观察和控制其

他进程的能力

当软中断发生时

系统将切换上下文

并唤

Mm®

此时通过

Ptace

调用读取和写入相应

内存

M15]

92

3.2

指令插桩算法

沿用

22

节中对指令

指令流和桩点的定义

輿乍)

标指令流

P

的入样本

S

下的拠亍路径集合

则对于

桩点

8^ins,addr,index)

,

指令插桩后的爲

(

P,S

)

满足

公式

(l)o

2

P,S

,ins

t

Z

2$

P,S

=

<

'^{P-addr^,S^

+{block,s^

+

1

ins,addr^,ins

g

Z

其中

必比表示对应指令集下的中断运算

£

为合法

Milko

推广到桩点集合

/?=(")

,

如公式

⑵际

E

r

(P,S

)

=E

(

P-&,S

)

+(Z>/

oc

A

,&)

x

(2)

根据以上形式定义

给出基于断点调试协议对预

tf#

的桩点集曲

nsa

娠法

算法

2

指令插桩算法

输入

原指令流

P,

原畴集合

R

输出

:插桩后指令流

P',

插桩后桩点集合

R'

Begin

Initialize

P

5

=E

R

9

=[]

Initialize

RSet(J0

For

ins

In

P':

IfinsInRSet:

addr=GetAddrAt(ms,P

,

)

index=GetIndexOf(ins

5

P

)

R'

.append(ins,addr,index)

SetBreakAt(addr

J

P

,

)

End

其中

SetBreakAt

函数表示对目标地址

addr

设置断点,

mt

与指令的对通过静态程中输出的臟

信息文彳核取

3.3

运行时监控

对二®制文件的插桩时机有两种:在启动时进行,

即由监控程序对指令流进行插桩后启动

此时监控

程序只需监听断点的触发

;

在运行时进行

即通过断

点调帥议连接正在运行的进程

并设置其中断点位

置购

启动时插桩方式的优势是实现简单

但在嵌入

式设备插桩任务时

由于监控程序往往不运行在被测

设备上

运行式则更为灵活

以启动时插桩为例

给出监控程序的执行流程

N0TINFO

SECURITY

__________________________________________________________________________________________________

2021

年第

4

理论研究

如下

监控程序启动后

读取静态分析得到的桩点

信息文件

启动程序并调用

CONNECT

连接到被测程

序进程

然后监控程序通过

GET_MEMORY

SET_

MEMORY

在桩点地址处设置断点

接着调用

WATT

复被测程序的运行。

当断点触发时

监控程序首先调

GET_REGS

读取寄存器状态

GET_MEMORY

读取

内存内容并记录

然后调用

SET_MEMORY

恢复桩点

地址的代码

并恢复程序执行

完成插桩任务后

DISCONNECT

结束监听

并对收集的运行时信息进

行后处理。

4

实验分析

本文所瞬法在

Linux

系统

h

进行了实现

得到了

动态插桩工具

binstub

该工具目前支持

x86

ARM32

架构

实现了对指令级

基本块级

函数级的插桩和

路径收集

实现了基于

Ptace

系统调用的软件断点和硬

件断点两种断点调帥议

为了验证

binstub

在执行路径收集问题上是否确

实有性能优势

设计实验与业界常用的现有工作

Pin

Dyninst

进行了对比

由于各个工具对不同环境的支持

程度有差异

因此选择相对最通用的

x86

架构下

Linux

系逾行测试

实验环境如表

2

所示

2

实验环境

Hardware

&

Software

Version

Architecture

x86

Operating

System

Linux

Linux

core4.4.238

C++

Compiler

g++

g++

9.3.0

binstub

1.0

Pin

3.16

Dyninst

9.3.2

4.1

数据集构造及评价指标

为了比较在复杂场景下本文方法的插桩效果

造了如表

3

所示数据集

首先统计本文算法对不同类

型语句进行插桩时的

CPU

消耗和内存消耗

;

然后对比

本文算法对同一程序进行不同模式插桩时的消耗,

统计算法在各种环境下的性

WM

数据集

1

分别对同步

"0

操作

异步

"0

操作

、纯

CPU

计算进行插桩和路径收集

为了模拟不同粒度下

程序的插喊果

本文设置了不同桩点数量实验

相应设置了循环

使每组实验的桩点总触发次数相同,

如表

3

所示

3

数据集

1

程序类型描述

桩点数量每桩点触发次数

Sync

I/O

intensive

1

100

Sync

I/O

intensive

100

1

Async

I/O

intensive1

100

Async

I/O

intensive

100

1

CPU

intensive

1

100

CPU

intensive

100

1

为了述

本文方法在不同插桩模式下的插

ttW

及对性能的影响

如表

4

所示构造数据集

2,

httpd

务器进行三种不同模式的插桩

然后测试其响应一个

请求的延时

为了降低网络波动带来的影响

每组实

鮭行

10

4

数据集

2

插桩模式

调试协议

不插桩

启动时插桩

Ptrace

运行时插桩

Ptrace

运行时插桩

硬件断点

本文实验对比过程中主要涉及以下指标:平均内

存占用、

平均

CPU

占用

定义如公式

(

3

)

和公式

(

4

)

所示

-

^monitor

+

^binary

(

3

)

T

=

+

tbinary

(

4

)

其中

表示插桩监控进程所占用内存

他切表

示被插桩进程所占用内存

鑰表示插桩监控进程初始

化所占用时间

心初表示桩点触发时间

垢刃表示被

插程抑亍时间

4.2

实验数据及对比分析

集曲亍了不同的实验,

结果如图

1

所示

其中

Ori

表示未插桩的程序

Pin

DynaRIO

binstub

分另!

I

表示用

Pin

DynamoRIO

以及本文方法进行插桩后

的程序

柱状图中横线背景为平均内存占用率

斜线背

93

N0TINFO

SECURITY

2021

年第

4

__________________________________________________________________________________________________

理论

研究

Sync

I/O,

1

Stub

Sync

I/O,

100

Stub

300

-

200

-

100

-

0-

(Yi

Pin

DynaRIO

binstub

1

数据集

1

实验结果

景的图例为平均

CPU

占用率

数据均为按照

Ori

数据归

的结果

从图

1

可以看岀,

本文方法在各种场景下的内存消

耗都与源程序接近

;

Pin

DynamoRIO

等工具的内存消

耗达到原程序的

2~3

且随着桩点数量的增加而有所

提升

因此本文方法在内存消耗上具有显著优势

行时间方面

本文方法在桩点数量较少时所用时间与

未插桩程序几乎相同

Pin

DynamoRIO

工具的用时

分别为

160%

120%

左右

100

个桩点

CPU

密集

运算的场景下

本文方法的执行效率高于

Pin,

略低于

DynamoRIO

工具

100

个桩点

I/O

运算中插桩的场

景下

,本文方法的效率高于

Pin,

DynamoRIO

工具的

效率裁杆

数据集

2

对应的实验结果如图

2

所示

测试点

2

数据集

2

实验结果

94

其中

圆形

三角形和方形标记所对应的折线分

别代表不插桩

启动时插桩和运行中插桩的响应时间,

单位为

ms

由于存在网络波动的影响

各组实验间结

果存在一定偏差

但曲线非常接近

可以看岀插桩时

机对性能的影响较小

星形标

i

己听对应的折线表示使

用硬件断点远程插桩时的实验结果

可以看出使用硬

件断点调试协议进行插桩时

相较于软件调试协议,

会影响插桩程序的性能

这可能是桩点触发时监控程

序与被测程序间通信的时延造成的

5

性能对比分析

从理论分析的角度,

将本文方法与传统二®制翻

译方法进行对比

主要区别体现在以下

3

。第一,

传统淞的翻译替换目标的每一条指令

而本文方法

只对桩点指令进行替换

;

第二

传统方法的指令翻译

过程发生在运行时

而本文方法的指令替换过程发生

在准备阶段

;

第三

动态翻译技术为了实现信息获取,

需要对软

Ol

行过程进行虚拟化

而本文施不涉及

该过程

从实齢果看

本文方法相比业界传统的动态插

桩方法

在内存占用率上有明显降低,

因此在嵌入式

测试等内存资源紧缺的测试环境中时具有显著优势

在运行效率上

当插桩点数量较小时

本文方法相比

业界传统方法具有明显优势

但当插桩点数量增加时,

本文方法的效率会随之降低

在嵌入式调试任务中,

需要插入的桩点数量往往比较有限

则此时应用本文

方法能够获得较高的效率阴

在可扩展性上

本文所用方法通过定义断点调试

协议

实现对各种平台

各种系统及无系统的嵌入式

设备的支持

相比于业界其他动态插桩实现

该方法

的优势在于消除了对特定操作系统或指令集的依赖,

但局限性在于需要根据不同目标程序编写特定的调试

器实现断点调试议

具有一定复杂性

I%

此外

本文方法的一个局限性在于需要预先提取

嵌入式设备中的二制程序

对于固件被加密

或因

设备原因无法提取二

制程序的场景

无法使用本文

N0TINFO

SECURITY

__________________________________________________________________________________________________

2021

年第

4

理论研究

方法完成动态插桩工作叫

6

结束语

针对嵌入式设备在动态插桩过程中的种种困难

本妊傾动

Mtw

想的基础上

臓了卫制静态

毓分析

断点调帥议

动态雌等林

实现了适

用于各种晌

各种系统(包麻系统)的®

设备

的动法

实鳞蘇明

本姑法在内存占用

插桩性能上相比传统插略法有一定优势

可以有效解

设备的动

«问题

在下一步的工作中

结合常制漏洞的与攻

软擁洞挖掘的通用族

参考文献

[1]

YAN

Lijing,

SHAN

Zheng,

JIA

Xun,

et

al.

Software

Dynamic

Trusted

Measurement

Based

on

Behavior

TraceQ].

Application

Research

of

Computers,

2017,34(2):

539-542.

闫丽景

单征

,贾璇等.基于行为轨迹的软件动态可信度量口计算

机应用研究

2017,

34(2

)

539-542.

[2]

LIN

Liangcheng,

GUO

Tao,

FENG

Baozhan.

Fuzz

Test

Vulnerability

Mining

Method

Based

on

Execution

PathfJ].

China

New

Telecommunications,

2020,22(1):43-44.

林亮成

国涛

封保占•基于执行路径的模糊测试漏洞挖掘方法口

中国新通信

2020,

22(1)

43-44.

[3]

MOMENIB,

KHARRAZIM.

LDMBL:

An

Architecture

for

Reducing

Code

Duplication

in

Heavyweight

Binary

Instrumentationsf]]

.

Software:

Practice

and

Experience,

2018,48(9):

1642

—1659.

[4]

LU

Shuaibing,

ZHANG

Ming,

LIN

Zhechao,

et

al.

Dynamic

Binary

Translation

and

Instrumentation

Based

Function

Call

Tracir^fj].

Journal

of

Computer

Research

and

Development,

2019,56

:

197

206.

卢帅兵

张明

林哲超

等•基于动态二进制翻译和插桩的函数调用跟

[J].

计算机研究与发展,

2019,

56

(2

)

197-206.

[5]

KHAMPARIA A,

BANU

S

J.

Program

Analysis

with

Dynamic

Instrumentation

Pin

and

Performance

lboils[Q]Z<[EEE.

International

Conference

on

Emerging

Trends

in

Computii^,

Commumcation

and

Nanotechnology

(ICE

CCN),

March

25

26,

2013,

Tirunelveli,

India.

New

"York:

IEEE,

2013:

436-440.

[6]

EBCIOGLU

K,

ALTMAN

E,

GSCHWIND

M,etal

Dynamic

Binary

Translation

and

Optimization[J].

IEEE

Transactions

on

Computers,

2001,

50(6):529-548.

[7]

BUCK

B.

An

API

for

Runtime

Code

Patching^].

International

Journal

of

High

Performance

Computing

Applications,

2000,14(4):

317

329.

[8]

HORVATH

F,

GERGEEY

T,

BESZEDES

A,

et

al.

Code

Coverage

Differences

of

Java

Bytecode

and

Source

Code

Instrumentation

Iools[J].

Software

Quality

Journal,

2019,27(1):

79-123.

[9]

GUO

Wensheng

WANG

Yong,

YANG

Xia,

et

aL

Codecx

)

mb:

Automated

Test

Case

Generation

and

Defect

Detecting

for

Embedded

Software

Based

on

Symbolic

Execution!]].

Journal

of

Chinese

Computer

Systems,

2017,

38(6):

1250-1255.

郭文生

汪勇

杨霞

等.

Codecomb

基于符号执行的嵌入式软件

测试案例自动生成与缺陷检测

UJ.

小型微型计算机系统

2017,

38

(6

)

1250-1255.

[10]

ZOU

Wei,

GAO

Feng,

YAN

yuncpang.

Dynamic

Binary

Instrumentation

Based

on

].

Journal

of

Computer

Research

and

Development,

2019,

56(4):730-741.

邹伟

高峰

颜运强

.

基于

QEMU

的动态二进制插桩技术

[J].

计算机

研究与发展

2019,

56(4

)

730-741.

[11]

YANG

Guangxiang.

Code

Embedding

Technology

ofELF

Executable

Program^].

Programmer,

2008,10(3):

104

106.

杨广翔

.

ELF

格式可执行程序的代码嵌入技术

[J].

程序员

2008,

10

(

3

)

104-106.

[12]

HU

S

J,

KO

J,

WEYAND

L,

et

al.

Assembly

System

Design

and

Operations

for

Product

^riety[J].

CIRP

Annals,

2011,

60

:

715

733.

[13]

REN

Yushuai.

Design

of

Remote

Debug

Tool

Based

on

Arm

and

T-kemel[J].

Microcontrollers

&

Embedded

Systems,

201&

18(5):

44

48.

任玉帅.Arm

T

kernel

系统的远程调试工具设计

[J].

单片机与嵌入

式系统应用

2018,

18

(5

)

44-48.

[14]

BAGHERZADEH

M,

KAHANIN,

BEZEMER

CP,etal.

Analyzing

A

Decade

of

Linux

System

Calls

[J].

Empirical

Software

Engineering,

2018,

23(3):

1519-1551.

[15]

KENISTONJ,

MAVINAKAYANAHALLI

A,

PANCHAMUKHIP,

et

al.

Ptrace,

Utrace,

Uprobes:

Lightweight,

Dynamic

Tracing

of

User

^>ps|EB/OL].

https:^Svww;^

)

ublication/228943171_Ptrace_

utrace_uprobes_L^Jitweight_dynainic_tracing_af_userL_apps,

2020

11

18.

[16]

MIKHAILOV

A

A-

Control

Flow

Graph

Anal

严is

in

Decompilation

of

Object

FilesQJ.

Computer

Science

Technolc^ies

Series,

2016,12(2):

74

79.

[17]

LU

Wei,

FANG

Yanwei,

CHEN

Yaquan.

The

Solutions

and

Key

Technologies

for

URLLC

Ultra

Low

Latency

[J].

Mobile

Communications,

2020,44(2):8-14.

陆威

方琰歲

陈亚权

.URLLC

超低时延解决方案和关键技术

[J].

移动通信

2020,

44(2

)

8-14.

[18]

ZHANG

Lei,

CHEN

Xingshu,

REN

Yi,

al.

Kernel-level

Rootkit

Detection

Technology

Based

on

VMM[J].

Netinfo

Security,

2015,

15(4):

56-61.

[19]

MCVOY

L,

STAELIN

C.

Lmbench:

Portable

Tools

for

Performance

Analysis[EB/OL].

/doi/10.5555/1268299.1268322

,

2020-12-01.

[20]

LUO

Lannan,

MING

Jiang,

WU

Dinghao,

et

al.

Semantics

based

Obfuscation

resilient

Binary

Code

Similarity

Comparison

with

Applications

to

Software

Plagiarism

Detection[C]//FSE.

ACM

SIGSOFT

International

Symposiuni

on

Foundations

ofSoftware

Engineering,

November

16

21,2014,

Hong

Kong,

Chinx

CHN:

FSE,

2014:389-400.

95