CN113553211A - 一种核心转储文件的生成方法、计算设备及存储介质 - Google Patents

一种核心转储文件的生成方法、计算设备及存储介质 Download PDF

Info

Publication number
CN113553211A
CN113553211A CN202111111767.8A CN202111111767A CN113553211A CN 113553211 A CN113553211 A CN 113553211A CN 202111111767 A CN202111111767 A CN 202111111767A CN 113553211 A CN113553211 A CN 113553211A
Authority
CN
China
Prior art keywords
target program
data
library
current process
core dump
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.)
Granted
Application number
CN202111111767.8A
Other languages
English (en)
Other versions
CN113553211B (zh
Inventor
刘昌辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Uniontech Software Technology Co Ltd
Original Assignee
Uniontech Software Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Uniontech Software Technology Co Ltd filed Critical Uniontech Software Technology Co Ltd
Priority to CN202111460118.9A priority Critical patent/CN114138531A/zh
Priority to CN202111111767.8A priority patent/CN113553211B/zh
Publication of CN113553211A publication Critical patent/CN113553211A/zh
Application granted granted Critical
Publication of CN113553211B publication Critical patent/CN113553211B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0778Dumping, i.e. gathering error/state information after a fault for later diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种核心转储文件的生成方法、计算设备及存储介质,该方法包括:监听目标程序的状态,所述目标程序中嵌入有预加载库;若所述目标程序出现异常,复制所述目标程序的当前进程,以生成所述当前进程对应的新进程;基于所述新进程,获取所述当前进程的关联数据;将所述关联数据进行转储处理,生成核心转储文件。根据本发明的技术方案,在没有根权限的情况下,可生成轻量级且具有一定保密性的核心转储文件。

Description

一种核心转储文件的生成方法、计算设备及存储介质
技术领域
本发明涉及计算机技术领域,特别涉及一种核心转储文件的生成方法、计算设备及存储介质。
背景技术
核心转储(Coredump)是指当程序出错而异常中断时,操作系统会把程序工作的当前状态存储成一个核心转储文件。通常情况下,核心转储文件包含了程序运行时的内存、寄存器状态、堆栈指针、内存管理信息等。
以Linux操作系统为例,在内核态生成的核心转储文件时,由于需要将进程的有效VMA(Virtual Memory Areas,虚拟内存区域)信息全量转储出来,这意味着大进程的核心转储文件会非常庞大,甚至达到TB(Terabyte,太字节)级别,在生成和保存过程中严重消耗了各类系统资源,对系统的稳定性带来冲击。
目前,新版本的Linux内核提供了一个虚拟配置文件来控制核心转储文件的大小,其本质是将转储的内存进行分类,每一类内存用一个比特位来标记。例如,用根权限设置好核心转储文件,打开谷歌浏览器访问百度首页,然后强行退出谷歌浏览器进程,可以得到生成的核心转储文件高达350MB(Mbyte,兆字节)。由此看来,虽然Linux内核提供了核心转储机制,但是需要根权限配置,由内核创建,并且生成的核心转储文件过大,影响了系统性能。
因此,需要一种新的核心转储文件的生成方法来优化上述处理过程。
发明内容
为此,本发明提供一种核心转储文件的生成方案,以力图解决或者至少缓解上面存在的问题。
根据本发明的一个方面,提供一种核心转储文件的生成方法,包括如下步骤:首先,监听目标程序的状态,目标程序中嵌入有预加载库;若目标程序出现异常,复制目标程序的当前进程,以生成当前进程对应的新进程;基于新进程,获取当前进程的关联数据;将关联数据进行转储处理,生成核心转储文件。
可选地,在根据本发明的核心转储文件的生成方法中,监听目标程序的状态的步骤,包括:在目标程序运行之后,加载预加载库;通过注册预加载库中的信号处理函数,监听目标程序的异常事件。
可选地,在根据本发明的核心转储文件的生成方法中,复制目标程序的当前进程,以生成当前进程对应的新进程的步骤,包括:调用预加载库中的信号处理函数;通过信号处理函数,复制出当前进程的新进程。
可选地,在根据本发明的核心转储文件的生成方法中,在基于新进程,获取当前进程的关联数据的步骤之前,还包括:设置新进程附加当前进程,以跟踪当前进程并获得当前进程的关联数据的访问权限。
可选地,在根据本发明的核心转储文件的生成方法中,基于新进程,获取当前进程的关联数据的步骤,包括:调用预加载库中的数据抓取函数,获取当前进程的关联数据,关联数据包括当前进程的全部线程的上下文数据和内存数据。
可选地,在根据本发明的核心转储文件的生成方法中,将关联数据进行转储处理,生成核心转储文件的步骤,包括:从关联数据中获取目标程序的版本号、目标程序出现异常时的时间戳、当前线进程的线程数量以及出现异常的线程标识,组合形成文件头;调用预加载库中的数据处理函数,对关联数据中的其他数据进行压缩后,结合文件头生成核心转储文件并进行存储。
可选地,在根据本发明的核心转储文件的生成方法中,还包括:核心转储文件生成完毕之后,通过新进程结束转储处理。
可选地,在根据本发明的核心转储文件的生成方法中,还包括:接预先生成预加载库,预加载库包括信号处理函数、数据抓取函数、数据处理函数以及转储配置函数;将预加载库嵌入到目标程序中,以跟踪目标程序。
根据本发明的又一个方面,提供了一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,程序指令被配置为适于由至少一个处理器执行,程序指令包括用于执行如上的核心转储文件的生成方法的指令。
根据本发明的又一个方面,提供了一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行如上的核心转储文件的生成方法。
根据本发明的核心转储文件的生成方案,在目标程序出现异常时,复制出目标程序的当前进程的新进程,基于该新进程获取当前进程的关联数据,再对关联数据进行转储处理以生成核心转储文件,实现了无需根权限而在用户态生成核心转储文件,且减少了核心转储文件的大小,降低了生成核心转储文件时对系统性能的影响。此外,核心转储文件中的部分数据是经过压缩处理而生成的,具有一定的保密性。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明的一个实施例的计算设备100的结构框图;
图2示出了根据本发明的一个实施例的核心转储文件的生成方法200的流程图;
图3示出了根据本发明的一个实施例的预加载库的示意图300;
图4示出了根据本发明的一个实施例的运行程序的组成示意图400;以及
图5示出了根据本发明的一个实施例的核心转储文件的生成示意图500。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的计算设备100的结构框图。
如图1所示,在基本配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。
取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(UP)、微控制器(UC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。
取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上由一个或多个处理器104利用程序数据124执行指令。
计算设备100还包括储存设备132,储存设备132包括可移除储存器136和不可移除储存器138。
计算设备100还可以包括储存接口总线134。储存接口总线134实现了从储存设备132(例如,可移除储存器136和不可移除储存器138)经由总线/接口控制器130到基本配置102的通信。操作系统120、应用122以及程序数据124的至少一部分可以存储在可移除储存器136和/或不可移除储存器138上,并且在计算设备100上电或者要执行应用122时,经由储存接口总线134而加载到系统存储器106中,并由一个或者多个处理器104来执行。
计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图像处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以是这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中以编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备100可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。当然,计算设备100也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、数码照相机、个人数字助理(PDA)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。甚至可以被实现为服务器,如文件服务器、数据库服务器、应用程序服务器和WEB服务器等。本发明的实施例对此均不做限制。
在根据本发明的实施例中,计算设备100被配置为执行根据本发明的核心转储文件的生成方法200。其中,布置在操作系统上的应用122中包含用于执行本发明的核心转储文件的生成方法200的多条程序指令,这些程序指令可以指示处理器104执行本发明的核心转储文件的生成方法200,以便计算设备200通过执行本发明的核心转储文件的生成方法200来生成核心转储文件。
图2示出了根据本发明一个实施例的核心转储文件的生成方法200的流程图。核心转储文件的生成方法200可以在计算设备(例如前述计算设备100)中执行。
如图2所示,方法200始于步骤S210。在步骤S210中,监听目标程序的状态,目标程序中嵌入有预加载库。根据本发明的一个实施例,可通过如下方式对目标程序的状态进行监听。首先,在目标程序运行之后,加载预加载库,然后通过注册预加载库中的信号处理函数,监听目标程序的异常事件。
这里的目标程序,可以是上述应用122中包含的某一个程序或应用,例如浏览器等。以上提到的预加载库,通常是需要预先生成的,以便在目标程序开始运行后,对目标程序进行跟踪,从而在目标程序出现异常时获取关联数据来生成核心转储文件。为了便于理解及后续表述,此处先对预加载库的相关内容进行说明。
根据本发明的又一个实施例,方法200还包括预先生成预加载库,将预加载库嵌入到目标程序中,以跟踪目标程序。在该实施方式中,以Linux系统为例,预加载库即为preload库,可提供一系列的函数、程序或命令等来帮助获取目标程序的相关信息。图3示出了根据本发明的一个实施例的预加载库的示意图300。如图3所示,预加载库包括信号处理函数、数据抓取函数、数据处理函数以及转储配置函数。
在预加载库中,信号处理函数可以捕捉到SIGSEGV(段错误信息)等系统异常信号,从而可以利用信号处理函数来监听被跟踪的目标程序是否出现了异常,如是否发生了进程崩溃,以便复制出崩溃进程的新进程。数据抓取函数可以实现对崩溃进程的关联数据进行抓取,即可获取崩溃进程的全部线程的上下文数据和内存数据,而数据处理函数则可以对关联数据进行处理以生成核心转储文件。转储配置函数一般用于配置要转储的内存数据类型和大小,可以在加载预加载库时调用,完成内存数据的相关配置。上述preload库支持使用环境变量来指定配置文件路径,将JSON(JavaScript Object Notation,JS对象简谱)文件作为配置文件来控制要转储的数据大小,环境变量设置命令如下:
CORE_CONFIG_FILE=/path/to/new/core.json
配置文件格式如下所示:
{
"dump_dir": "~/.local/share/core/",
"stacks": {
"max_size": 32},
"modules": [
"/usr/lib/x86_64-linux-gnu/libqt*so*",
"/usr/lib/x86_64-linux-gnu/libc-2.24.so"],
"variables": [
{"name": "g_map",
"is_pointer":false,
"max_size": 1},
{"name": "g_buffer",
"is_pointer":true,
"max_size": 1}],
}
每个字段意义如下:
dump_dir:字符串类型,指定要转储的文件目录路径, 默认是/home/your-name/.local/share/core/;
stacks:字典类型,指定如何转储线程栈数据;
max_size(stacks内):整数类型,指定要转储的每个线程栈的最大值,单位是KB(Kilobyte,千字节),默认是32KB;
modules:字符串数组类型,指定哪些模块的可写内存段被转储;
variables:字典数组,指定要转储的全局变量数据:
name:字符串类型,指定全局变量名称,如果生产环境没有调试符号, 可以用模块名称加地址偏移值的形式;
max_size(variables内),整数类型, 指定全局变量转储的最大内存值,单位是KB;
is_pointer:布尔类型,为true时表示该全局变量是一个指针,如果是一个指针,max_size就是这个指针指向的内存大小。
以下为preload库的核心代码示例:
static bool dumpCallback(const google_breakpad::MinidumpDescriptor&descriptor, void*
context, bool succeeded){
printf("Dump path: %s\n", descriptor.path());
return succeeded;}
void* work_thread (void* arg){
google_breakpad::MinidumpDescriptor descriptor("/tmp");
google_breakpad::ExceptionHandler eh(descriptor, NULL,dumpCallback, NULL, true,
-1);
printf("sig mon sart\n");
while (!eh.IsOutOfProcess()) {
sleep(5);}
printf("sig mon end\n");
return NULL;}
static void __attribute__((constructor)) init_process(void) {
pthread_t thread;
pthread_create(&thread, NULL, work_thread, NULL);}
预加载库生成后,可以确定待跟踪的程序,将该程序作为目标程序,并将预加载库嵌入到目标程序中,开始运行目标程序。图4示出了根据本发明的一个实施例的运行程序的组成示意图400。如图4所示,目标程序运行起来后的组成,包括了编译好的应用程序(可理解为目标程序本身)、预加载库(用于核心转储的preload库)、系统库(如Linux下的C语言函数库libc等)以及第三方依赖库。
回到步骤S210中,在目标程序运行之后,优先加载preload库,通过注册preload库中的SIGSEGV等信号处理函数,监听目标程序的异常事件,以判断目标程序的当前进程是否出现了崩溃。
随后,进入步骤S220,若目标程序出现异常,复制目标程序的当前进程,以生成当前进程对应的新进程。根据本发明的一个实施例,可通过如下方式生成新进程。具体来说,先调用预加载库中的信号处理函数,再通过信号处理函数,复制出当前进程的新进程。
在该实施方式中,当目标程序的当前进程崩溃时,信号处理函数监听到目标程序出现了异常,则通过信号处理函数复制(或克隆)目标程序的当前进程,生成当前进程的新进程,该新进程只有一个线程,并和当前进程共享进程空间和文件系统。
接下来,在步骤S230中,基于新进程,获取当前进程的关联数据。在获取关联数据之前,还需要对新进程进行相关处理以便获得关联数据的访问权限。根据本发明的又一个实施例,在基于新进程,获取当前进程的关联数据的之前, 设置新进程附加当前进程,以跟踪当前进程并获得当前进程的关联数据的访问权限。在该实施方式中,调用PTRACE_ATTACH命令附加当前进程,这里附加的含义是复制得到的新进程是当前进程的跟踪进程,具有了访问当前进程的关联数据,即上下文数据和内存数据的权限。
在获取关联数据时,可调用预加载库中的数据抓取函数,获取当前进程的关联数据,关联数据包括当前进程的全部线程的上下文数据和内存数据。例如,数据抓取函数包括PTRACE的系列子命令,调用PTRACE_GETREGS命令访问通用寄存器, 调用PTRACE_GETFPREGS命令访问浮点寄存器,调用PTRACE_PEEKUSER和PTRACE_PEEKDATA 命令访问内存,获取当前进程的全部线程的上下文数据和内存数据。
最后,执行步骤S240,将关联数据进行转储处理,生成核心转储文件。根据本发明的一个实施例,可以通过如下方式完成转储处理以生成核心转储文件。先从关联数据中获取目标程序的版本号、目标程序出现异常时的时间戳、当前线进程的线程数量以及出现异常的线程标识,组合形成文件头,然后调用预加载库中的数据处理函数,对关联数据中的其他数据进行压缩后,结合文件头生成核心转储文件并进行存储。
在该实施方式中,核心转储文件是具有自定义格式的,其文件头一般为16个字节(byte),其中,目标程序的版本号为4字节,目标程序出现异常时的时间戳为8字节,当前线进程的线程数量为2字节,出现异常的线程标识为2字节,除了这16个字节的文件头之外,关联数据中余下的其他数据可采用zstd(Zstandard,一种快速数据压缩算法)作为数据处理函数来压缩,并写入本地磁盘文件进行存储,这样生成的核心转储文件具有一定的保密性。
以下为核心转储文件的格式示例:
版本号(4byte),时间戳(sizeof(struct timespec), 8byte), 进程的线程数(2byte),发生崩溃的线程id(2byte)
系统版本信息数据块长度(4byte)[,系统版本信息数据块长度]
进程/proc/self/maps文件长度(4byte)[,进程/proc/self/maps文件具体数据]
进程/proc/self/cmdline文件长度(4byte)[,进程/proc/self/cmdline文件具体数据]
进程/proc/self/environ文件长度(4byte)[,进程/proc/self/environ文件具体数据]
进程/proc/self/auxv文件长度(4byte)[,进程/proc/self/auxv文件具体数据]
线程0上下文{
tid(2byte), CPU上下文字节数(2byte)[sizeof(user_regs_struct)+sizeof(user_fpregs_
struct)],
TLS数据字节数(4byte)[, TLS数据]
栈顶地址(uintptr_t, 8byte), 栈长度(4byte)[,栈数据]}
...
线程N的上下文{
tid(2byte), CPU上下文字节数(2byte)[sizeof(user_regs_struct)+sizeof(user_fpregs_
struct)],
TLS数据字节数(4byte)[, TLS数据]
栈顶地址(uintptr_t, 8byte), 栈长度(4byte)[,栈数据]}
堆数据块数量(4byte)[, [数据块0的地址(uintptr_t)+数据块0的长度(4byte)+数据块0
的地址的具体数据], ...[数据块N的地址(uintptr_t)+数据块N的长度(4byte)+数据块N
的地址的具体数据]]
其中,CPU、TSL分别是Central Processing Unit(中央处理器)、Transport LayerSecurity(安全传输层协议)的简称。自定义的核心转储文件格式的优势是结构简单,最小单元是一个数据块,每个数据块以一个数据长度开始后面跟随具体的数据,多个数据块按照上面的自定义格式拼接起来。
以某一视频应用播放720P(Progressive Scanning,逐行扫描)视频举例,当该视频应用出现异常时,通过三种方式生成的核心转储文件大小如下表所示:
方式 核心转储文件大小
常规内核方式 625MB
Breakpad默认方式 718KB
本发明的技术方案 88KB
表1
表1示出了根据本发明一个实施例的三种方式生成的核心转储文件大小,其中,常规内核方式为基于新版本Linux内核提供的虚拟配置文件控制核心转储文件大小的方式,所生成的核心转储文件为625M。Breakpad是谷歌开源的一个跨平台的崩溃报告服务,包含了客户端和服务端,客户端负责生成崩溃进程的上下文信息,保存到其自定义的 minidump文件里面,上传到服务器端,服务器端根据保存的程序的符号信息输出崩溃的线程调用栈信息,利用Breakpad默认方式得到的核心转储文件为718KB。而根据本发明的技术方案,最终生成的核心转储文件才88KB,大大减少了核心转储文件的占用空间,降低了生成过程给系统性能的影响。
根据本发明的又一个实施例,核心转储文件生成完毕之后,通过新进程结束转储处理。此时,新进程调用exit(退出)函数主动退出,而发生崩溃的当前进程也随后退出。
图5示出了根据本发明的一个实施例的核心转储文件的生成示意图500。如图4所示,目标程序出现异常后,内核调用预加载库中已注册好的信号处理函数,复制一个目标程序的当前进程的新进程,随后该新进程附加目标程序的当前进程,通过PTRACE的系列子命令访问当前进程的关联数据,即全部线程的上下文数据和内存数据,如CPU寄存器、每个线程的栈数据,将关联数据进行转储处理,生成核心转储文件存入磁盘。这一过程中,信号处理函数会一直等到新线程完成转储处理,待新线程退出后,当前进程也将退出。
此外,在得到上述核心转储文件后,可以解析该核心转储文件的文件头,并解压该核心转储文件中除文件头以外的其他数据,按照标准核心转储文件格式依次填充,以得到完整的标准核心转储文件,进而可自动用GDB(GNU symbolic debugger,GNU调试器)查看。其中,标准核心转储文件格式类似ELF(Executable and Linkable Format,可执行与可链接格式)文件的组织结构,可以用"readelf -e"命令查看,一般有一个ELF文件头和N个程序头。
根据本发明实施例的核心转储文件的生成方案,基于预加载库的一系列函数,监控目标程序并获取目标程序出现异常时的当前进程的关联数据,实现了核心转储文件的自定义,具有一定的保密性,并可灵活配置要转储的进程内存数据,且无需根权限,在用户态根据关联数据快速生成核心转储文件,减少了核心转储文件的大小,降低生成过程对系统性能的影响。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的核心转储文件的生成方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

Claims (10)

1.一种核心转储文件的生成方法,包括:
监听目标程序的状态,所述目标程序中嵌入有预加载库;
若所述目标程序出现异常,复制所述目标程序的当前进程,以生成所述当前进程对应的新进程;
基于所述新进程,获取所述当前进程的关联数据;
将所述关联数据进行转储处理,生成核心转储文件。
2.如权利要求1所述的方法,其中,所述监听目标程序的状态的步骤,包括:
在目标程序运行之后,加载所述预加载库;
通过注册所述预加载库中的信号处理函数,监听所述目标程序的异常事件。
3.如权利要求1或2所述的方法,所述复制所述目标程序的当前进程,以生成所述当前进程对应的新进程的步骤,包括:
调用所述预加载库中的信号处理函数;
通过所述信号处理函数,复制出所述当前进程的新进程。
4.如权利要求3所述的方法,其中,在所述基于所述新进程,获取当前进程的关联数据的步骤之前,还包括:
设置所述新进程附加所述当前进程,以跟踪所述当前进程并获得所述当前进程的关联数据的访问权限。
5.如权利要求3所述的方法,其中,所述基于所述新进程,获取所述当前进程的关联数据的步骤,包括:
调用所述预加载库中的数据抓取函数,获取所述当前进程的关联数据,所述关联数据包括所述当前进程的全部线程的上下文数据和内存数据。
6.如权利要求3所述的方法,其中,所述将所述关联数据进行转储处理,生成核心转储文件的步骤,包括:
从所述关联数据中获取所述目标程序的版本号、所述目标程序出现异常时的时间戳、所述当前线进程的线程数量以及出现异常的线程标识,组合形成文件头;
调用所述预加载库中的数据处理函数,对所述关联数据中的其他数据进行压缩后,结合所述文件头生成核心转储文件并进行存储。
7.如权利要求3所述的方法,还包括:
所述核心转储文件生成完毕之后,通过所述新进程结束转储处理。
8.如权利要求3所述的方法,还包括:
预先生成所述预加载库,所述预加载库包括信号处理函数、数据抓取函数、数据处理函数以及转储配置函数;
将所述预加载库嵌入到所述目标程序中,以跟踪所述目标程序。
9.一种计算设备,包括:
至少一个处理器;以及
存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-8中任一项所述的方法的指令。
10.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-8中任一项所述方法。
CN202111111767.8A 2021-09-23 2021-09-23 一种核心转储文件的生成方法、计算设备及存储介质 Active CN113553211B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111460118.9A CN114138531A (zh) 2021-09-23 2021-09-23 一种核心转储文件的生成方法、计算设备及存储介质
CN202111111767.8A CN113553211B (zh) 2021-09-23 2021-09-23 一种核心转储文件的生成方法、计算设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111111767.8A CN113553211B (zh) 2021-09-23 2021-09-23 一种核心转储文件的生成方法、计算设备及存储介质

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202111460118.9A Division CN114138531A (zh) 2021-09-23 2021-09-23 一种核心转储文件的生成方法、计算设备及存储介质

Publications (2)

Publication Number Publication Date
CN113553211A true CN113553211A (zh) 2021-10-26
CN113553211B CN113553211B (zh) 2022-01-18

Family

ID=78106534

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202111111767.8A Active CN113553211B (zh) 2021-09-23 2021-09-23 一种核心转储文件的生成方法、计算设备及存储介质
CN202111460118.9A Pending CN114138531A (zh) 2021-09-23 2021-09-23 一种核心转储文件的生成方法、计算设备及存储介质

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202111460118.9A Pending CN114138531A (zh) 2021-09-23 2021-09-23 一种核心转储文件的生成方法、计算设备及存储介质

Country Status (1)

Country Link
CN (2) CN113553211B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116431376B (zh) * 2023-06-09 2023-09-05 苏州浪潮智能科技有限公司 一种核心转储方法、系统、设备及计算机可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106649089A (zh) * 2016-10-09 2017-05-10 武汉斗鱼网络科技有限公司 一种程序崩溃分析方法及系统
CN108170595A (zh) * 2017-12-25 2018-06-15 北京蓝海讯通科技股份有限公司 一种转储文件生成方法及数据探针的安装和卸载方法
CN108733465A (zh) * 2017-04-18 2018-11-02 北大方正集团有限公司 服务进程的控制方法、服务进程的控制装置和终端
CN110727566A (zh) * 2019-09-05 2020-01-24 北京字节跳动网络技术有限公司 一种获取进程崩溃信息的方法、装置、介质和电子设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106649089A (zh) * 2016-10-09 2017-05-10 武汉斗鱼网络科技有限公司 一种程序崩溃分析方法及系统
CN108733465A (zh) * 2017-04-18 2018-11-02 北大方正集团有限公司 服务进程的控制方法、服务进程的控制装置和终端
CN108170595A (zh) * 2017-12-25 2018-06-15 北京蓝海讯通科技股份有限公司 一种转储文件生成方法及数据探针的安装和卸载方法
CN110727566A (zh) * 2019-09-05 2020-01-24 北京字节跳动网络技术有限公司 一种获取进程崩溃信息的方法、装置、介质和电子设备

Also Published As

Publication number Publication date
CN114138531A (zh) 2022-03-04
CN113553211B (zh) 2022-01-18

Similar Documents

Publication Publication Date Title
US9858072B2 (en) Portable executable file analysis
CN111033466B (zh) 对闪存进行分区以及实现具有映像升级能力的灵活引导
US11544223B2 (en) Write operation verification method and apparatus
US20180321947A1 (en) Protecting basic input/output (bios) code
US10671548B2 (en) Memory initialization detection system
US20070226545A1 (en) Methods and systems for generating and storing computer program execution trace data
US6317818B1 (en) Pre-fetching of pages prior to a hard page fault sequence
CN113553211B (zh) 一种核心转储文件的生成方法、计算设备及存储介质
US10275595B2 (en) System and method for characterizing malware
WO2022156277A1 (zh) 一种应用程序安装方法、装置、计算设备及可读存储介质
CN112558884A (zh) 数据保护方法以及基于NVMe的存储设备
CN112579138A (zh) 页面展示方法、装置、电子设备及存储介质
US20070079109A1 (en) Simulation apparatus and simulation method
CN109214184B (zh) 一种Android加固应用程序通用自动化脱壳方法和装置
CN114168073B (zh) 固态硬盘调试空间的访问方法及装置
CN113326214B (zh) 一种页缓存管理方法、计算设备及可读存储介质
CN115687128A (zh) 一种代码异常处理方法、装置、电子设备及存储介质
JP2011227700A (ja) 周辺機器障害模擬システム、周辺機器障害模擬方法および周辺機器障害模擬プログラム
CN111061591A (zh) 基于存储器完整性检查控制器实现数据完整性检查的系统和方法
US9606732B2 (en) Verification of serialization of storage frames within an address space via multi-threaded programs
CN113312262B (zh) 一种程序调试方法、计算设备及储存介质
CN112699056B (zh) 一种程序调试方法、计算设备及储存介质
US20150347037A1 (en) Verification of management of real storage via multi-threaded thrashers in multiple address spaces
KR100802686B1 (ko) 어레이 바운더리 체킹 방법 및 시스템
CN113886162A (zh) 一种计算设备性能测试方法、计算设备及存储介质

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