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


发布评论