CN117435440B - 一种程序堆空间的动态分析方法及系统 - Google Patents
一种程序堆空间的动态分析方法及系统 Download PDFInfo
- Publication number
- CN117435440B CN117435440B CN202311754778.7A CN202311754778A CN117435440B CN 117435440 B CN117435440 B CN 117435440B CN 202311754778 A CN202311754778 A CN 202311754778A CN 117435440 B CN117435440 B CN 117435440B
- Authority
- CN
- China
- Prior art keywords
- heap space
- heap
- program
- address
- space
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 40
- 238000000034 method Methods 0.000 claims abstract description 39
- 230000006399 behavior Effects 0.000 claims abstract description 12
- 238000009826 distribution Methods 0.000 claims abstract description 4
- 230000006870 function Effects 0.000 claims description 96
- 230000008569 process Effects 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 11
- 238000003860 storage Methods 0.000 claims description 7
- 238000013507 mapping Methods 0.000 claims description 6
- 238000002347 injection Methods 0.000 claims description 3
- 239000007924 injection Substances 0.000 claims description 3
- 230000008859 change Effects 0.000 abstract description 9
- 238000010586 diagram Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 238000011835 investigation Methods 0.000 description 3
- 239000000523 sample Substances 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012367 process mapping Methods 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种程序堆空间的动态分析方法及系统,本发明方法包括:S1,捕获程序的分配、释放堆空间行为以获取堆空间对象的信息;S2,分析程序的堆空间对象的数据结构;S3,结合堆空间对象的信息及数据结构,定时获取程序的堆空间数据并生成堆空间对象的快照数据;S4,针对指定堆空间对象的两组快照数据进行分析以确定堆空间对象的动态变化。本发明以无侵入方式跟踪程序整个生命周期堆空间变化、记录堆空间对象详细数据结构并形成快照,以方便进一步分析程序堆空间使用情况的。
Description
技术领域
本发明涉及程序的内存分析技术领域,具体涉及一种程序堆空间的动态分析方法及系统。
背景技术
众所周知,在C/C++语言中并没有垃圾回收机制,在其应用程序开发过程中,开发者需要手动开辟、释放堆空间,其中不可避免的会出现内存泄露、非法地址访问、滥用堆栈空间等错误,这些可能会造成敏感数据泄露、段错误、持续消耗系统资源等严重威胁信息安全、服务稳定性等方面的问题。目前在Linux操作系统下,对C/C++程序的内存泄露检测工具有很多,但这些工具对于排查处于运行时的C/C++程序观测堆栈使用、内存泄露还有一定的局限性。比如内存分析工具valgrind、memleak等常用来分析二进制程序内存泄露问题,这些工具大多数需要在程序开始运行时就要注入程序,无法对处于运行时的程序进行分析;另外此类分析工具并不会记录堆空间的详细使用情况及堆空间对象数据结构,对于排查堆空间溢出、脏写、滥用等问题并不友好。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种能够跟踪程序整个生命周期堆空间变化、记录堆空间对象详细数据结构并形成快照方便进一步分析程序堆空间使用情况的程序堆空间的动态分析方法及系统。
为了解决上述技术问题,本发明采用的技术方案为:
一种程序堆空间的动态分析方法,包括下述步骤:
S1,捕获程序的分配、释放堆空间行为以获取堆空间对象的信息;
S2,分析程序的堆空间对象的数据结构;
S3,结合堆空间对象的信息及数据结构,定时获取程序的堆空间数据并生成堆空间对象的快照数据;
S4,针对指定堆空间对象的两组快照数据进行分析以确定堆空间对象的动态变化。
可选地,步骤S1中捕获程序的分配、释放堆空间行为是采用无侵入注入Hook函数的方式实现。
可选地,所述Hook函数包括堆空间分配函数的入口Hook函数、堆空间分配函数的返回Hook函数以及堆空间释放函数的Hook函数,所述堆空间分配函数的入口Hook函数、堆空间分配函数的返回Hook函数用于获取栈指针寄存器、堆空间对象的大小和堆空间对象的地址,所述堆空间释放函数的Hook函数用于获取所释放的堆空间地址。
可选地,步骤S2包括:
S21,获取堆空间分配函数的入口Hook函数或堆空间分配函数的返回Hook函数捕获的栈指针寄存器;
S22,由栈指针寄存器计算出程序代码段的逻辑地址;
S23,由程序代码段的段逻辑地址计算对应所处源代码的行数,并根据源代码的行数获取源代码处的堆空间对象类型;
S24,由结合程序的调试信息获取堆空间对象的数据结构。
可选地,步骤S22包括:
S221,由栈指针寄存器取出下一条指令地址,在根据下一条指令地址向上偏移一个字节得到调用函数的线性地址;
S222,获取程序对应进程pid的映射关系文件/proc/[pid]/maps,从映射关系文件/proc/[pid]/maps中提取出代码段相对文件偏移地址,将调用函数的线性地址减去代码段相对文件偏移地址得到对应程序代码段的逻辑地址。
可选地,步骤S23包括采用使用addr2line工具计算程序代码段的段逻辑地址对应所处源代码的行数,并根据源代码的行数获取源代码处的堆空间对象的数据类型。
可选地,步骤S24包括在得到堆空间对象的数据类型的基础上,结合使用libdwarf第三方库解析程序Dwarf的调试信息获取得到堆空间对象的数据结构。
可选地,步骤S3包括:
S31,根据得到的堆空间对象的数据类型、数据结构、地址、大小构建四元组;
S32,在堆空间释放函数的Hook函数获取所释放的堆空间地址不等于四元组中的堆空间对象的地址的情况下,将四元组通过获取指定进程地址空间内容的系统调用获取程序对应进程的堆空间内容;
S33,根据堆空间对象的数据结构解析堆空间详细信息得到堆空间数据;
S34,将堆空间数据以数据快照的形式存储。
可选地,步骤S4中针对指定堆空间对象的两组快照数据进行分析以确定堆空间对象的动态变化是指:针对指定堆空间对象的两组快照数据采用比较工具进行比较分析以确定堆空间对象的动态变化。
此外,本发明还提供一种程序堆空间的动态分析系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述程序堆空间的动态分析方法。
此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述程序堆空间的动态分析方法。
和现有技术相比,本发明主要具有下述优点:本发明包括通过预先构建的程序堆空间跟踪模块捕获程序的分配,释放堆空间行为;通过预先构建的堆空间对象数据结构解析模块分析堆空间对象的数据结构;通过预先构建的堆空间解析模块定时获取程序的堆空间数据并生成快照;通过预先构建的堆空间快照对比模块分析程序堆空间数据的动态变化,通过上述方式,使得本发明能够跟踪程序整个生命周期堆空间变化、记录堆空间对象详细数据结构并形成快照方便进一步分析程序堆空间使用情况,本发明能够观测程序堆空间的整个生命周期,分析堆空间对应数据结构,并定时记录程序堆空间数据快照,最后通过对比快照可以较方便得用于程序调试、堆空间溢出、脏写、入侵检测等,对程序安全性、性能分析、内存问题排查等具有一定优势。
附图说明
图1为本发明实施例方法的基本流程示意图。
图2为本发明实施例方法的程序模块结构示意图。
图3为本发明实施例中程序堆空间跟踪模块的Hook函数示意图。
图4为本发明实施例中步骤S2的流程示意图。
图5为本发明实施例中步骤S3的流程示意图。
图6为本发明实施例中步骤S4的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面以x86平台 kylin v10sp1操作系统, 采用libc库中malloc、free提供分配、释放堆空间功能及ebpf技术为实施例,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。
如图1所示,本实施例程序堆空间的动态分析方法包括下述步骤:
S1,捕获程序的分配、释放堆空间行为以获取堆空间对象的信息;
S2,分析程序的堆空间对象的数据结构;
S3,结合堆空间对象的信息及数据结构,定时获取程序的堆空间数据并生成堆空间对象的快照数据;
S4,针对指定堆空间对象的两组快照数据进行分析以确定堆空间对象的动态变化。
参见图2,作为一种可选的实施方式,本实施例将步骤S1~S4分别采用了不同的程序模块来实现对应的功能,包括通过构建的程序堆空间跟踪模块捕获程序的分配、释放堆空间行为;通过构建的堆空间对象数据结构解析模块分析堆空间存储对象的数据结构;通过构建的堆空间解析模块定时获取执行程序的堆空间并生成快照;通过构建的堆空间快照对比模块分析程序堆空间动态变化。
程序堆空间跟踪模块用于捕获程序的分配、释放堆空间行为以获取堆空间对象的信息。为了实现无侵入的捕获程序的分配、释放堆空间行为,本实施例步骤S1中捕获程序的分配、释放堆空间行为是采用无侵入注入Hook函数的方式实现。
如图3所示,本实施例中的Hook函数包括堆空间分配函数的入口Hook函数、堆空间分配函数的返回Hook函数以及堆空间释放函数的Hook函数,所述堆空间分配函数的入口Hook函数、堆空间分配函数的返回Hook函数用于获取栈指针寄存器、堆空间对象的大小和堆空间对象的地址,堆空间释放函数的Hook函数用于获取所释放的堆空间地址,由此来解除堆空间解析模块对此块堆空间的引用。具体地,本实施例中使用ebpf uprobe/uretprobe对libc库中的malloc堆空间分配函数、free释放函数定义Hook函数,其中对于malloc函数定义uprobe、uretprobe Hook函数, uprobe Hook函数用来获取申请堆空间的大小及栈指针寄存器内容, 采用ebpf帮助函数bpf_probe_read_user可获取当前栈指针寄存器指向内容,由栈指针寄存器取出下一条指令地址,也即malloc函数调用后的下一条指令地址,向上偏移一个字节即为malloc调用处的线性地址;malloc uretprobe Hook函数获取分配的堆空间地址;free 函数定义 uprobe Hook函数,获取释放堆空间地址。
如图4所示,本实施例的步骤S2包括:
S21,获取堆空间分配函数的入口Hook函数或堆空间分配函数的返回Hook函数捕获的栈指针寄存器;
S22,由栈指针寄存器计算出程序代码段的逻辑地址;
S23,由程序代码段的段逻辑地址计算对应所处源代码的行数,并根据源代码的行数获取源代码处的堆空间对象类型;
S24,由结合程序的调试信息获取堆空间对象的数据结构。
步骤S22使用栈指针寄存器获取栈帧中压入指令的地址,根据函数调用栈原理,调用堆空间分配函数时会将下一条指令入栈,由此指令地址可获取堆空间分配函数调用时的线性地址。具体地,本实施例中步骤S22包括:
S221,由栈指针寄存器取出下一条指令地址,在根据下一条指令地址向上偏移一个字节得到调用函数的线性地址;
S222,获取程序对应进程pid的映射关系文件/proc/[pid]/maps,从映射关系文件/proc/[pid]/maps中提取出代码段相对文件偏移地址,将调用函数的线性地址减去代码段相对文件偏移地址得到对应程序代码段的逻辑地址。
由步骤S1中Hook函数获取当前栈指针寄存器计算调用函数线性地址,根据函数调用栈原理,在函数调用时call指令会将下一条指令地址入栈,使用ebpf中bpf_probe_read_user函数获取当前栈指针寄存器的内容,也就是下一条指令地址即malloc函数调用后的下条指令地址,由此减去一个字节即为malloc函数触发前在程序中的线性地址;由该程序对应进程映射关系文件/proc/[pid]/maps,计算对应程序代码段逻辑地址,如例maps内容为:
“55s57775bf000-5557775d2000 r-xp 00004000 103:03 1967632./test”
其中“55s57775bf000”为可执行程序二进制文件加载线性地址,“00004000”为代码段相对文件偏移地址, 两者做减法即为代码段起始线性地址,再利用上一步获取的malloc函数调用处的线性地址减去此处代码段起始的线性地址即为对应程序代码段的逻辑地址。
本实施例步骤S23包括采用使用addr2line工具计算程序代码段的段逻辑地址对应所处源代码的行数,并根据源代码的行数获取源代码处的堆空间对象的数据类型。步骤S23使用了addr2line 工具将程序代码段逻辑地址解析对应源代码行号, addr2line是Linux binutils软件包的一个二进制解析工具,可以从程序代码段逻辑地址解析出对应源代码的行号,由源代码位置解析出所分配的堆空间对象类型。
本实施例步骤S24包括在得到堆空间对象的数据类型的基础上,结合使用libdwarf第三方库解析程序Dwarf的调试信息获取得到堆空间对象的数据结构。步骤S24由程序的Dwarf调试信息解析对应步骤S23中堆空间对象类型,获取堆空间对象详细数据结构,Dwarf是Linux下二进制调试信息格式,根据调试信息分析对应数据类型的成员结构及各成员所占空间大小。
如图5所示,本实施例步骤S3包括:
S31,根据得到的堆空间对象的数据类型、数据结构、地址、大小构建四元组;
S32,在堆空间释放函数的Hook函数获取所释放的堆空间地址不等于四元组中的堆空间对象的地址的情况下,将四元组通过获取指定进程地址空间内容的系统调用process_vm_readv获取程序对应进程的堆空间内容。其中,获取指定进程地址空间内容的系统调用process_vm_readv 是Linux API 提供的一种可以获取指定进程指定地址空间内容的方法,利用该方法获取指定堆空间内容;
S33,根据堆空间对象的数据结构解析堆空间详细信息得到堆空间数据; 由步骤S2中堆空间对象数据结构解析堆空间详细信息得到堆空间数据,之后将解析出的内存保存到文件,并存储堆空间对象地址、堆空间对象类型、时间戳等信息,方便后续对比;当freeHook函数被触发时解除对应四元组引用不再获取堆空间内容;
S34,将堆空间数据以数据快照的形式存储。
如图6所示,本实施例步骤S4中针对指定堆空间对象的两组快照数据进行分析以确定堆空间对象的动态变化是指:针对指定堆空间对象的两组快照数据采用比较工具(如diff、colordiff、wdiff等)进行比较分析以确定堆空间对象的动态变化,具体包括:
S41,选取步骤S3中的堆空间数据快照集合中任意两组相同堆空间对象的数据快照;
S42,使用diff工具打开两组文件观察堆空间对象空间变化。
综上所述,本实施例程序堆空间的动态分析方法包括通过预先构建的程序堆空间跟踪模块捕获程序的分配,释放堆空间行为;通过预先构建的堆空间对象数据结构解析模块分析堆空间对象的数据结构;通过预先构建的堆空间解析模块定时获取程序的堆空间数据并生成快照;通过预先构建的堆空间快照对比模块分析程序堆空间数据的动态变化,通过上述方式,使得本实施例程序堆空间的动态分析方法能够跟踪程序整个生命周期堆空间变化、记录堆空间对象详细数据结构并形成快照方便进一步分析程序堆空间使用情况,本实施例程序堆空间的动态分析方法能够观测程序堆空间的整个生命周期,分析堆空间对应数据结构,并定时记录程序堆空间数据快照,最后通过对比快照可以较方便得用于程序调试、堆空间溢出、脏写、入侵检测等,对程序安全性、性能分析、内存问题排查等具有一定优势。
此外,本实施例还提供一种程序堆空间的动态分析系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述程序堆空间的动态分析方法。本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述程序堆空间的动态分析方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (8)
1.一种程序堆空间的动态分析方法,其特征在于,包括下述步骤:
S1,捕获程序的分配、释放堆空间行为以获取堆空间对象的信息;
S2,分析程序的堆空间对象的数据结构;
S3,结合堆空间对象的信息及数据结构,定时获取程序的堆空间数据并生成堆空间对象的快照数据;
S4,针对指定堆空间对象的两组快照数据进行分析以确定堆空间对象的动态变化;
步骤S2包括:
S21,获取堆空间分配函数的入口Hook函数或堆空间分配函数的返回Hook函数捕获的栈指针寄存器;
S22,由栈指针寄存器计算出程序代码段的逻辑地址;
S23,由程序代码段的段逻辑地址计算对应所处源代码的行数,并根据源代码的行数获取源代码处的堆空间对象类型;
S24,结合程序的调试信息获取堆空间对象的数据结构,包括在得到堆空间对象类型的基础上,结合使用libdwarf第三方库解析程序的Dwarf调试信息获取得到堆空间对象的数据结构,包括堆空间对象类型的成员结构及各成员所占空间大小。
2.根据权利要求1所述的程序堆空间的动态分析方法,其特征在于,步骤S1中捕获程序的分配、释放堆空间行为是采用无侵入注入Hook函数的方式实现。
3.根据权利要求2所述的程序堆空间的动态分析方法,其特征在于,所述Hook函数包括堆空间分配函数的入口Hook函数、堆空间分配函数的返回Hook函数以及堆空间释放函数的Hook函数,所述堆空间分配函数的入口Hook函数、堆空间分配函数的返回Hook函数用于获取栈指针寄存器、堆空间对象的大小和堆空间对象的地址,所述堆空间释放函数的Hook函数用于获取所释放的堆空间地址。
4.根据权利要求1所述的程序堆空间的动态分析方法,其特征在于,步骤S22包括:
S221,由栈指针寄存器取出下一条指令地址,在根据下一条指令地址向上偏移一个字节得到调用函数的线性地址;
S222,获取程序对应进程pid的映射关系文件/proc/[pid]/maps,从映射关系文件/proc/[pid]/maps中提取出代码段相对文件偏移地址,将调用函数的线性地址减去代码段相对文件偏移地址得到对应程序代码段的逻辑地址。
5.根据权利要求3所述的程序堆空间的动态分析方法,其特征在于,步骤S3包括:
S31,根据得到的堆空间对象的数据类型、数据结构、地址、大小构建四元组;
S32,在堆空间释放函数的Hook函数获取所释放的堆空间地址不等于四元组中的堆空间对象的地址的情况下,将四元组通过获取指定进程地址空间内容的系统调用获取程序对应进程的堆空间内容;
S33,根据堆空间对象的数据结构解析堆空间详细信息得到堆空间数据;
S34,将堆空间数据以数据快照的形式存储。
6.根据权利要求3所述的程序堆空间的动态分析方法,其特征在于,步骤S4中针对指定堆空间对象的两组快照数据进行分析以确定堆空间对象的动态变化是指:针对指定堆空间对象的两组快照数据采用比较工具进行比较分析以确定堆空间对象的动态变化。
7.一种程序堆空间的动态分析系统,包括相互连接的微处理器和存储器,其特征在于,所述微处理器被编程或配置以执行权利要求1~6中任意一项所述程序堆空间的动态分析方法。
8.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其特征在于,所述计算机程序用于被微处理器编程或配置以执行权利要求1~6中任意一项所述程序堆空间的动态分析方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311754778.7A CN117435440B (zh) | 2023-12-20 | 2023-12-20 | 一种程序堆空间的动态分析方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311754778.7A CN117435440B (zh) | 2023-12-20 | 2023-12-20 | 一种程序堆空间的动态分析方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117435440A CN117435440A (zh) | 2024-01-23 |
CN117435440B true CN117435440B (zh) | 2024-04-05 |
Family
ID=89550185
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311754778.7A Active CN117435440B (zh) | 2023-12-20 | 2023-12-20 | 一种程序堆空间的动态分析方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117435440B (zh) |
Citations (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6658652B1 (en) * | 2000-06-08 | 2003-12-02 | International Business Machines Corporation | Method and system for shadow heap memory leak detection and other heap analysis in an object-oriented environment during real-time trace processing |
CN101515248A (zh) * | 2008-02-21 | 2009-08-26 | 国际商业机器公司 | 面向对象程序的跟踪方法和系统 |
CN103559449A (zh) * | 2013-11-15 | 2014-02-05 | 华为技术有限公司 | 一种代码改动的检测方法及装置 |
CN106855845A (zh) * | 2015-12-09 | 2017-06-16 | 北京信威通信技术股份有限公司 | 堆空间的内存分配管理系统及嵌入式芯片 |
CN107729747A (zh) * | 2017-11-10 | 2018-02-23 | 中国科学院软件研究所 | 一种面向二进制程序的堆溢出检测方法 |
CN107943520A (zh) * | 2016-10-11 | 2018-04-20 | 腾讯科技(深圳)有限公司 | 应用堆栈信息获取方法及装置、堆栈信息解析方法及装置 |
CN108073461A (zh) * | 2016-11-11 | 2018-05-25 | 腾讯科技(深圳)有限公司 | 内存泄漏调试方法及装置 |
CN108469997A (zh) * | 2017-12-01 | 2018-08-31 | 中国科学院软件研究所 | 一种基于动态特征的自定义堆管理函数的自动识别方法 |
CN111597109A (zh) * | 2020-04-24 | 2020-08-28 | 清华大学 | 一种跨架构固件堆内存的缺陷检测方法及系统 |
CN113297064A (zh) * | 2020-07-29 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 代码覆盖率测试方法、系统、设备及存储介质 |
CN113672237A (zh) * | 2021-09-03 | 2021-11-19 | 支付宝(杭州)信息技术有限公司 | 防内存越界的程序编译方法及装置 |
US11288170B1 (en) * | 2020-12-10 | 2022-03-29 | International Business Machines Corporation | Log analysis debugging without running on real production environment |
CN115269190A (zh) * | 2022-07-29 | 2022-11-01 | 北京字跳网络技术有限公司 | 内存分配方法、装置、电子设备、存储介质及产品 |
CN116010019A (zh) * | 2021-10-22 | 2023-04-25 | 腾讯科技(深圳)有限公司 | 一种内存资源的分配方法、相关装置及设备 |
CN116048481A (zh) * | 2023-01-05 | 2023-05-02 | 恒生电子股份有限公司 | 业务信息处理系统及方法 |
CN116484390A (zh) * | 2023-05-24 | 2023-07-25 | 南京南瑞网络安全技术有限公司 | 一种基于元数据和动态插桩技术的堆漏洞攻击检测方法、设备及介质 |
CN116594796A (zh) * | 2023-04-10 | 2023-08-15 | 中山大学 | 一种基于eBPF的进程崩溃信息收集方法和装置 |
CN116795718A (zh) * | 2023-07-06 | 2023-09-22 | 麒麟软件有限公司 | 基于eBPF的Linux系统内存泄漏检测方法及系统 |
CN117113338A (zh) * | 2023-08-25 | 2023-11-24 | 成都安恒信息技术有限公司 | 一种检测vpp内存泄露的系统、方法、存储介质及设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8997218B2 (en) * | 2010-12-22 | 2015-03-31 | F-Secure Corporation | Detecting a return-oriented programming exploit |
KR101716865B1 (ko) * | 2016-04-29 | 2017-03-15 | 고려대학교 산학협력단 | 주 메모리의 에러 셀 회피를 위한 스택 및 힙 메모리 관리 장치 및 그 방법 |
US11740996B2 (en) * | 2021-10-25 | 2023-08-29 | Dell Products, L.P. | Automatic creation of structured error logs from unstructured error logs |
-
2023
- 2023-12-20 CN CN202311754778.7A patent/CN117435440B/zh active Active
Patent Citations (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6658652B1 (en) * | 2000-06-08 | 2003-12-02 | International Business Machines Corporation | Method and system for shadow heap memory leak detection and other heap analysis in an object-oriented environment during real-time trace processing |
CN101515248A (zh) * | 2008-02-21 | 2009-08-26 | 国际商业机器公司 | 面向对象程序的跟踪方法和系统 |
CN103559449A (zh) * | 2013-11-15 | 2014-02-05 | 华为技术有限公司 | 一种代码改动的检测方法及装置 |
CN106855845A (zh) * | 2015-12-09 | 2017-06-16 | 北京信威通信技术股份有限公司 | 堆空间的内存分配管理系统及嵌入式芯片 |
CN107943520A (zh) * | 2016-10-11 | 2018-04-20 | 腾讯科技(深圳)有限公司 | 应用堆栈信息获取方法及装置、堆栈信息解析方法及装置 |
CN108073461A (zh) * | 2016-11-11 | 2018-05-25 | 腾讯科技(深圳)有限公司 | 内存泄漏调试方法及装置 |
CN107729747A (zh) * | 2017-11-10 | 2018-02-23 | 中国科学院软件研究所 | 一种面向二进制程序的堆溢出检测方法 |
CN108469997A (zh) * | 2017-12-01 | 2018-08-31 | 中国科学院软件研究所 | 一种基于动态特征的自定义堆管理函数的自动识别方法 |
CN111597109A (zh) * | 2020-04-24 | 2020-08-28 | 清华大学 | 一种跨架构固件堆内存的缺陷检测方法及系统 |
CN113297064A (zh) * | 2020-07-29 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 代码覆盖率测试方法、系统、设备及存储介质 |
US11288170B1 (en) * | 2020-12-10 | 2022-03-29 | International Business Machines Corporation | Log analysis debugging without running on real production environment |
CN113672237A (zh) * | 2021-09-03 | 2021-11-19 | 支付宝(杭州)信息技术有限公司 | 防内存越界的程序编译方法及装置 |
CN116010019A (zh) * | 2021-10-22 | 2023-04-25 | 腾讯科技(深圳)有限公司 | 一种内存资源的分配方法、相关装置及设备 |
CN115269190A (zh) * | 2022-07-29 | 2022-11-01 | 北京字跳网络技术有限公司 | 内存分配方法、装置、电子设备、存储介质及产品 |
CN116048481A (zh) * | 2023-01-05 | 2023-05-02 | 恒生电子股份有限公司 | 业务信息处理系统及方法 |
CN116594796A (zh) * | 2023-04-10 | 2023-08-15 | 中山大学 | 一种基于eBPF的进程崩溃信息收集方法和装置 |
CN116484390A (zh) * | 2023-05-24 | 2023-07-25 | 南京南瑞网络安全技术有限公司 | 一种基于元数据和动态插桩技术的堆漏洞攻击检测方法、设备及介质 |
CN116795718A (zh) * | 2023-07-06 | 2023-09-22 | 麒麟软件有限公司 | 基于eBPF的Linux系统内存泄漏检测方法及系统 |
CN117113338A (zh) * | 2023-08-25 | 2023-11-24 | 成都安恒信息技术有限公司 | 一种检测vpp内存泄露的系统、方法、存储介质及设备 |
Non-Patent Citations (3)
Title |
---|
Variable Record Table: A Run-time Solution for Mitigating Buffer Overflow Attack;Love Kumar Sah et al.;2019 IEEE 62nd International Midwest Symposium on Circuits and Systems;20190807;239-242 * |
基于ART的垃圾收集机制研究;王玲;中国优秀硕士学位论文全文数据库 信息科技辑;20180615(第06期);论文第3章 * |
基于内存管理的模式化软件关键行为跟踪技术;袁野 等;计算机工程与设计;20141231;第35卷(第12期);4153-1459 * |
Also Published As
Publication number | Publication date |
---|---|
CN117435440A (zh) | 2024-01-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9727436B2 (en) | Adding a profiling agent to a virtual machine to permit performance and memory consumption analysis within unit tests | |
US8776029B2 (en) | System and method of software execution path identification | |
JP5430570B2 (ja) | システムコールカバレッジ基準による試験スイート削減のための方法 | |
Artzi et al. | Recrash: Making software failures reproducible by preserving object states | |
CN111756575B (zh) | 存储服务器的性能分析方法及装置、电子设备 | |
US8732681B2 (en) | Stack analysis for post mortem analysis | |
CN109583200B (zh) | 一种基于动态污点传播的程序异常分析方法 | |
JP2019519056A5 (zh) | ||
Chow et al. | Multi-stage replay with crosscut | |
US10121004B2 (en) | Apparatus and method for monitoring virtual machine based on hypervisor | |
CN107133144B (zh) | 一种动态监测堆内存使用错误的内存监测装置及方法 | |
US20150006961A1 (en) | Capturing trace information using annotated trace output | |
US9069894B2 (en) | Data collisions in concurrent programs | |
CN112181815A (zh) | 基于Python的异常捕获方法、装置及计算机可读存储介质 | |
US11836070B2 (en) | Reducing trace recording overheads with targeted recording via partial snapshots | |
Pagani et al. | Back to the whiteboard: A principled approach for the assessment and design of memory forensic techniques | |
CN104750602B (zh) | 一种动态污点数据分析方法及装置 | |
CN117435440B (zh) | 一种程序堆空间的动态分析方法及系统 | |
CN116820610A (zh) | 一种可观测领域中对用户态程序动态跟踪的方法和装置 | |
CN111931191A (zh) | Linux平台二进制软件堆溢漏洞动态检测方法及系统 | |
Fiedor et al. | Advances in the ANaConDA framework for dynamic analysis and testing of concurrent C/C++ programs | |
Wang et al. | Detecting data races in interrupt-driven programs based on static analysis and dynamic simulation | |
CN115114117A (zh) | 数据记录方法和数据记录装置 | |
CN115080426A (zh) | 程序文件的检测方法及装置、存储介质和电子设备 | |
US9495278B2 (en) | Dynamic discovery of data segments within instrumented code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |