[go: up one dir, main page]

CN103761089B - The method that kinematic function call relation is determined based on register transfer language - Google Patents

The method that kinematic function call relation is determined based on register transfer language Download PDF

Info

Publication number
CN103761089B
CN103761089B CN201410015881.4A CN201410015881A CN103761089B CN 103761089 B CN103761089 B CN 103761089B CN 201410015881 A CN201410015881 A CN 201410015881A CN 103761089 B CN103761089 B CN 103761089B
Authority
CN
China
Prior art keywords
function
file
address
name
call
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.)
Expired - Fee Related
Application number
CN201410015881.4A
Other languages
Chinese (zh)
Other versions
CN103761089A (en
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.)
Tsinghua University
Original Assignee
Tsinghua University
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 Tsinghua University filed Critical Tsinghua University
Priority to CN201410015881.4A priority Critical patent/CN103761089B/en
Publication of CN103761089A publication Critical patent/CN103761089A/en
Application granted granted Critical
Publication of CN103761089B publication Critical patent/CN103761089B/en
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开一种基于寄存器传输语言确定动态函数调用关系的方法,主要针对静态函数调用关系无法分析函数指针调用和可加载模块函数调用关系的问题而设计。本发明在系统运行过程中检测函数调用执行事件,若检测到调用指令后,解析该指令调用的函数入口地址对应的函数名,统计指令次数,输出函数名、调用发生时间、所属进程号、所属线程号、所属栈顶指针以及模块号,并保存到跟踪数据文件;若检测的指令是返回指令后,输出时间、所属进程号、所属线程号以及所属栈顶指针到跟踪数据文件;对所述跟踪数据文件进行处理获得预定标准的数据格式,将所述跟踪数据文件传输至静态函数调用关系生成装置中,生成描述函数调用关系的动态函数调用图。

The invention discloses a method for determining a dynamic function call relationship based on a register transfer language, which is mainly designed for the problem that the static function call relationship cannot analyze the function pointer call and the loadable module function call relationship. The present invention detects a function call execution event during system operation. If a call instruction is detected, it analyzes the function name corresponding to the function entry address called by the instruction, counts the number of instructions, and outputs the function name, call occurrence time, process number, and The thread number, the pointer to the top of the stack and the module number to which it belongs, and save it to the tracking data file; if the detected instruction is to return the command, output the time, the process number, the thread number to it, and the pointer to the top of the stack to the tracking data file; The trace data file is processed to obtain a predetermined standard data format, and the trace data file is transmitted to the static function call relationship generation device to generate a dynamic function call graph describing the function call relationship.

Description

基于寄存器传输语言确定动态函数调用关系的方法Method of determining dynamic function call relationship based on register transfer language

技术领域technical field

本发明涉及函数调用关系技术领域,具体涉及一种基于寄存器传输语言确定动态函数调用关系的方法。The invention relates to the technical field of function call relations, in particular to a method for determining dynamic function call relations based on a register transfer language.

背景技术Background technique

对源代码的阅读分析可以通过函数调用图来实现,函数调用图可以是宏观的(源码模块间调用关系),也可以是微观的(具体到某一个函数的调入和调出关系)。函数调用图可以展现源代码静态的一种函数调用走向,也可以用来展示系统或程序运行时函数调用状态。为了分析的精确、方便以及高效,研究者开发许多函数调用图的生成工具。The reading and analysis of the source code can be realized through the function call graph. The function call graph can be macroscopic (the calling relationship between source code modules) or microscopic (specifically the call-in and call-out relationship of a certain function). The function call graph can show a static function call trend of the source code, and can also be used to show the function call status when the system or program is running. In order to analyze accurately, conveniently and efficiently, researchers have developed many function call graph generation tools.

静态函数调用图生成工具是指建立在已知源码的基础上,根据不同的分析需要开发的工具,这些工具中有些作用对象仅为源码如Source Insight、Understand等,有些作用对象是编译过程生成的中间结果如Codeviz、Egypt、LLVM以及Open64等。Static function call graph generation tools refer to tools that are based on known source code and developed according to different analysis needs. Some of these tools only work on source code, such as Source Insight, Understand, etc., and some work objects are generated by the compilation process. Intermediate results such as Codeviz, Egypt, LLVM, and Open64.

动态函数调用图生成工具是建立在获取系统或软件在运行过程中发生的函数调用关系并绘制成调用图的工具,为了获取运行时的函数调用情况也开发了一些工具如Systemtap、gprof、KCachegrind、ftrace、pprof tool等,它们有些是针对于内核有些是针对有软件的,其基于的目的也各不相同,但它们都是基于函数调用关系分析。The dynamic function call graph generation tool is a tool based on obtaining the function call relationship that occurs during the running of the system or software and drawing it into a call graph. In order to obtain the function call situation at runtime, some tools such as Systemtap, gprof, KCachegrind, ftrace, pprof tool, etc., some of them are for the kernel and some are for software, and their purposes are also different, but they are all based on function call relationship analysis.

Gprof是在编译时让每个函数均调用mcount函数,同时会在内存中保存函数调用图,这样做会降低系统的性能,如果对系统全部函数调用跟踪的话,会造成内存使用不足。Ftrace的原理类似于gprof的原理,只是它不会在内存中保存函数调用图,而且mcount的使用也是动态的,可以根据用户的要求在需要时替换nop为mcount指令。SystemTap是监控和跟踪运行中的Linux内核的操作的动态方法,SystemTap没有使用工具构建一个特殊的内核,而是允许您在运行时动态地安装该工具,它通过一个名为Kprobes的应用编程接口(API)来实现该目的。pprof tool主要用于分析cpu运行瓶颈需要对应用软件产生中断后记录相关信息。Gprof、ftrace以及KCachegrind都是基于静态的插桩技术,ftrace其本质也是静态的插桩技术只是实现上有所不同。而本文将要采用的跟踪工具是建立在虚拟机之上的,不会对源代码插入代码,因此不会影响系统执行本身的性能。Gprof allows each function to call the mcount function during compilation, and at the same time saves the function call graph in memory. This will reduce the performance of the system. If all function calls in the system are tracked, it will cause insufficient memory usage. The principle of Ftrace is similar to the principle of gprof, except that it does not save the function call graph in memory, and the use of mcount is also dynamic, and nop can be replaced by mcount instructions when needed according to user requirements. SystemTap is a dynamic method of monitoring and tracking the operation of the running Linux kernel. Instead of using tools to build a special kernel, SystemTap allows you to dynamically install the tool at runtime. It uses an application programming interface called Kprobes ( API) to achieve this. The pprof tool is mainly used to analyze the bottleneck of cpu operation and record relevant information after interrupting the application software. Gprof, ftrace, and KCachegrind are all based on static instrumentation technology. The essence of ftrace is also static instrumentation technology, but the implementation is different. The tracking tool that will be used in this article is based on the virtual machine, and will not insert code into the source code, so it will not affect the performance of the system execution itself.

KCachegrind无法跟踪到系统调用,而gprof、ftrace等可以跟踪到系统调用但无法跟踪到系统启动过程,这些问题都将在本文的工具中得到解决。SimSight基于Simics的动态跟踪工具,与本文设计理念最为接近,但SimSight无法给出静态与动态相结合的函数调用图。KCachegrind cannot trace system calls, while gprof, ftrace, etc. can trace system calls but cannot trace the system startup process. These problems will be solved in the tools of this article. SimSight is based on Simics' dynamic tracking tool, which is the closest to the design concept of this paper, but SimSight cannot provide a function call graph combining static and dynamic.

发明内容Contents of the invention

针对上述问题,本发明提供一种能够清楚描述指针函数以及可加载模块的调用关系的基于寄存器传输语言确定动态函数调用关系的方法。In view of the above problems, the present invention provides a method for determining the dynamic function calling relationship based on register transfer language, which can clearly describe the calling relationship of pointer functions and loadable modules.

为达到上述目的,本发明基于寄存器传输语言确定动态函数调用关系的方法,所述方法包括:In order to achieve the above object, the present invention determines a method for dynamic function call relationship based on register transfer language, said method comprising:

在系统运行过程中检测函数调用执行事件,Detect function call execution events during system operation,

若检测到调用指令后,解析该指令调用的函数入口地址对应的函数名,统计指令次数,输出函数名、调用发生时间、所属进程号、所属线程号、所属栈顶指针以及模块号,并保存到跟踪数据文件;If a call instruction is detected, analyze the function name corresponding to the function entry address called by the instruction, count the number of instructions, output the function name, call occurrence time, process number, thread number, stack top pointer and module number, and save to the trace data file;

若检测的指令是返回指令后,输出时间、所属进程号、所属线程号以及所属栈顶指针到跟踪数据文件;If the detected command is after the return command, output the time, process number, thread number and stack top pointer to the tracking data file;

对所述跟踪数据文件进行处理获得预定标准的数据格式,将处理后的跟踪数据文件传输至静态函数调用关系生成装置中,生成描述函数调用关系的动态函数调用图。The trace data file is processed to obtain a predetermined standard data format, and the processed trace data file is transmitted to the static function call relationship generation device to generate a dynamic function call graph describing the function call relationship.

进一步地,所述跟踪数据文件的生成方法包括:Further, the method for generating the tracking data file includes:

通过对目标文件的解析获取函数入口地址对应的函数名、函数所在文件及行号的列表;Obtain the function name corresponding to the function entry address, the list of the file where the function is located and the line number by parsing the target file;

解析操作系统内核符号表,获取函数入口地址和函数名,根据地址和函数名查找获取的函数所在文件及行号补全函数信息,并记录到函数列表数组中;Analyze the kernel symbol table of the operating system, obtain the function entry address and function name, search for the obtained function file and line number to complete the function information according to the address and function name, and record it in the function list array;

读取模块符号表,获取模块的函数符号表,并记录到模块函数列表数组中;Read the module symbol table, obtain the function symbol table of the module, and record it into the module function list array;

若给定的地址在函数列表数组中找到,则返回模块名和函数名;If the given address is found in the function list array, return the module name and function name;

若给定的地址在模块函数列表数组中找到,则返回系统的模块名和函数名;If the given address is found in the module function list array, return the module name and function name of the system;

若给定的地址在所述函数列表数组和所述模块函数列表数组均找不到,则判断函数是否在内存中存在,If the given address cannot be found in both the function list array and the module function list array, it is judged whether the function exists in the memory,

若在内存中存在,则从内存中读取内存地址,在此地址之后依次读取符号地址判断与需查询地址是否一致,并记录内存位置,从记录位置读取内存信息为函数名索引地址,若查到则根据索引地址和符号地址起始地址读取符号名长度,计算出所查地址的偏移,获取函数名长度,进而返回函数名;If it exists in the memory, read the memory address from the memory, read the symbolic address sequentially after this address to judge whether it is consistent with the address to be queried, and record the memory location, read the memory information from the recorded location as the function name index address, If it is found, read the length of the symbol name according to the index address and the start address of the symbol address, calculate the offset of the searched address, obtain the length of the function name, and then return the function name;

若在内存中不存在,则在加载模块的符号表中读取相应的函数名,从模块中读取内存地址,通过模块地址获取模块的函数名。If it does not exist in the memory, read the corresponding function name in the symbol table of the loaded module, read the memory address from the module, and obtain the function name of the module through the module address.

进一步地,对记录的跟踪数据文件补充函数调用关系并转化标准格式,将数据上传至静态函数调用关系生成装置,Further, the function call relationship is added to the recorded tracking data file and converted into a standard format, and the data is uploaded to the static function call relationship generation device,

其中所述补充函数调用关系包括:根据调用和返回的进程号、线程号以及栈顶指针来把函数的调用和返回进行配对,同时获取函数的执行时间,同时把数据转化为标准格式;The supplementary function call relationship includes: pairing the call and return of the function according to the process number, thread number and stack top pointer of the call and return, simultaneously obtaining the execution time of the function, and converting the data into a standard format;

所述数据上传至静态函数调用关系生成装置包括:The data uploaded to the static function call relationship generation device includes:

按FROM字段提供的目录和文件名,把记录分别复制到相应源代码文件的动态函数调用关系文件中;According to the directory and file name provided by the FROM field, copy the records to the dynamic function call relationship file of the corresponding source code file;

按照每个动态函数调用关系文件中的TO字段判断该函数调用是否源自该文件,Determine whether the function call originates from the file according to the TO field in each dynamic function call relationship file,

若不是该文件的则写入到对应源代码文件的动态函数对外调用关系文件,同时判断该文件是否源自该目录,若不是写入到对应目录的动态函数对外调用关系文件;If it is not the file, write the dynamic function external call relationship file to the corresponding source code file, and judge whether the file originates from the directory at the same time, if it is not the dynamic function external call relationship file written to the corresponding directory;

根据最后一层目录的外调用关系文件逐层返回上一级目录填写上一级目录的外调用关系文件。Return to the upper-level directory layer by layer according to the external-call relationship file of the last-level directory to fill in the external-call relationship file of the upper-level directory.

进一步地,所述方法还包括显示所述函数调用关系图的步骤,以及对已生成的函数调用关系图和列表进行缓存的步骤。Further, the method further includes a step of displaying the function call relationship diagram, and a step of caching the generated function call relationship diagram and list.

本发明,结合了函数调用图工具的动态工具能够将指定时间内的文件间、模块间调用关系通过连线的形式表示,能够发现运行时绑定的指针型函数调用以及可加载模块的函数调用。而且由于动态跟踪的方法给予调用与返回指令,能够跟踪系统启动一部分时间的函数调用关系,并且该工具还可以和其他动态函数跟踪工具结合,将其他工具的结果显示。In the present invention, the dynamic tool combined with the function call graph tool can express the call relationship between files and modules within a specified time in the form of connections, and can find the pointer function call bound at runtime and the function call of the loadable module . Moreover, because the dynamic tracking method gives call and return instructions, it can track the function call relationship during a part of the system startup time, and this tool can also be combined with other dynamic function tracking tools to display the results of other tools.

附图说明Description of drawings

图1是本发明基于寄存器传输语言确定动态函数调用关系的方法获取函数名和模块名的流程图。FIG. 1 is a flow chart of obtaining function names and module names by a method for determining a dynamic function call relationship based on a register transfer language in the present invention.

图2是本发明基于寄存器传输语言确定动态函数调用关系的方法的数据获取算法流程图。FIG. 2 is a flow chart of the data acquisition algorithm of the method for determining the dynamic function call relationship based on the register transfer language of the present invention.

具体实施方式detailed description

下面结合说明书附图对本发明做进一步的描述。The present invention will be further described below in conjunction with the accompanying drawings.

本实施例基于寄存器传输语言确定动态函数调用关系的方法,所述方法包括:In this embodiment, a method for determining a dynamic function call relationship based on a register transfer language, the method includes:

在系统运行过程中检测函数调用执行事件,Detect function call execution events during system operation,

若检测到调用指令后,解析该指令调用的函数入口地址对应的函数名,统计指令次数,输出函数名、调用发生时间、所属进程号、所属线程号、所属栈顶指针以及模块号,并保存到跟踪数据文件;If a call instruction is detected, analyze the function name corresponding to the function entry address called by the instruction, count the number of instructions, output the function name, call occurrence time, process number, thread number, stack top pointer and module number, and save to the trace data file;

若检测的指令是返回指令后,输出时间、所属进程号、所属线程号以及所属栈顶指针到跟踪数据文件;If the detected command is after the return command, output the time, process number, thread number and stack top pointer to the tracking data file;

对所述跟踪数据文件进行处理获得预定标准的数据格式,将处理后的跟踪数据文件传输至静态函数调用关系生成装置中,生成描述函数调用关系的动态函数调用图。The trace data file is processed to obtain a predetermined standard data format, and the processed trace data file is transmitted to the static function call relationship generation device to generate a dynamic function call graph describing the function call relationship.

如图1所示,依次判断函数是在内核中还是在各个可加载模块中。所述跟踪数据文件的生成方法包括:As shown in Figure 1, it is determined in turn whether the function is in the kernel or in each loadable module. The generation method of described tracking data file comprises:

通过对目标文件的解析获取函数入口地址对应的函数名、函数所在文件及行号的列表;Obtain the function name corresponding to the function entry address, the list of the file where the function is located and the line number by parsing the target file;

解析操作系统内核(system.map)符号表,获取函数入口地址和函数名,根据地址和函数名查找获取的函数所在文件及行号补全函数信息,并记录到函数列表数组中;Analyze the operating system kernel (system.map) symbol table, obtain the function entry address and function name, search for the obtained function file and line number to complete the function information according to the address and function name, and record it in the function list array;

读取模块符号表,获取模块的函数符号表,并记录到模块函数列表数组中;Read the module symbol table, obtain the function symbol table of the module, and record it into the module function list array;

若给定的地址在函数列表数组中找到,则返回模块名和函数名;If the given address is found in the function list array, return the module name and function name;

若给定的地址在模块函数列表数组中找到,则返回系统的模块名(kernel)和函数名,函数名通过查表得到;If the given address is found in the module function list array, return the module name (kernel) and function name of the system, and the function name is obtained by looking up the table;

若给定的地址在所述函数列表数组和所述模块函数列表数组均找不到,则判断函数是否在内存中存在,If the given address cannot be found in both the function list array and the module function list array, it is judged whether the function exists in the memory,

若在内存中存在,则从内存中读取内存地址,在此地址之后依次读取符号地址判断与需查询地址是否一致,并记录内存位置,从记录位置读取内存信息为函数名索引地址,若查到则根据索引地址和符号地址起始地址读取符号名长度,计算出所查地址的偏移,获取函数名长度,进而返回函数名;If it exists in the memory, read the memory address from the memory, read the symbolic address sequentially after this address to judge whether it is consistent with the address to be queried, and record the memory location, read the memory information from the recorded location as the function name index address, If it is found, read the length of the symbol name according to the index address and the start address of the symbol address, calculate the offset of the searched address, obtain the length of the function name, and then return the function name;

若在内存中不存在,则在加载模块的符号表中读取相应的函数名,从模块中读取内存地址,通过模块地址获取模块的函数名。If it does not exist in the memory, read the corresponding function name in the symbol table of the loaded module, read the memory address from the module, and obtain the function name of the module through the module address.

本实施例,利用内核函数调用检测插件(LinuxCallMonitor)获取函数调用过程中产生的调用和返回指令,然后通过获取的内核符号和解析elf文件得到的函数路径和行号信息与指令信息对应,获得更新后的记录。LinuxCallMonitor插件功能的实现依赖于内核符号表解析插件(SymbolResolver)和FunctionMonitor插件(虚拟机-S2E里提供了用于获取系统内函数调用指令的探测),通过注册块翻译事件之后可以使用CallSignal来检测函数调用执行事件,检测到调用指令后对该指令调用的函数入口地址解析出地址对应的函数名,统计指令次数,输出函数名、调用发生时间、所属进程号、所属线程号、所属栈顶指针以及模块号,并保存到跟踪数据文件。当检测的指令是返回指令时仅输出时间、所属进程号、所属线程号以及所属栈顶指针到跟踪数据文件In this embodiment, the kernel function call detection plug-in (LinuxCallMonitor) is used to obtain the call and return instructions generated in the function call process, and then the obtained kernel symbols and the function path and line number information obtained by parsing the elf file are corresponding to the instruction information to obtain the update subsequent records. The implementation of the LinuxCallMonitor plug-in function depends on the kernel symbol table resolution plug-in (SymbolResolver) and the FunctionMonitor plug-in (virtual machine-S2E provides detection for obtaining function call instructions in the system), and the CallSignal can be used to detect functions after registering block translation events Call execution event, after the call command is detected, the function entry address called by the command is parsed to obtain the function name corresponding to the address, the number of commands is counted, and the function name, call occurrence time, process number, thread number, stack top pointer and module number, and save to the trace data file. When the detected instruction is a return instruction, only the time, process number, thread number and stack top pointer are output to the trace data file

利用SymbolResovler插件与内核编译时提供的模块符号表及解析操作系统可执行文件(vmlinux)elf格式获取函数名和函数所在文件行号,获得包含函数入口地址、函数名以及行号的符号表。虚拟机-S2E获取函数调用仅是函数入口地址,如何正确解析出地址对应的函数名是动态跟踪的关键问题。获取符号表的方式主要可以分为两种目标文件中的符号表和系统运行时内存中的符号表。目标文件中的符号表可分为三类:本文件中的全局符号、本文件引用了的其它文件中的全区符号以及本文件中的本地符号,对于这些符号表可以使用GNU binutils提供的nm获取,但只能获取内核自身的符号表,对内核运行时加载的模块内的符号则无能为力,而S2E作为运行在主机上的虚拟机,我们可以通过从客户机的内存里直接获取和查找符号表。Use the module symbol table provided by the SymbolResovler plug-in and kernel compilation and parse the elf format of the operating system executable file (vmlinux) to obtain the function name and line number of the file where the function is located, and obtain a symbol table including the function entry address, function name, and line number. The function call obtained by the virtual machine-S2E is only the function entry address. How to correctly resolve the function name corresponding to the address is the key issue of dynamic tracking. The way to obtain the symbol table can be mainly divided into two types: the symbol table in the object file and the symbol table in the memory when the system is running. The symbol table in the object file can be divided into three categories: global symbols in this file, global symbols in other files referenced by this file, and local symbols in this file. For these symbol tables, nm provided by GNU binutils can be used. Obtain, but can only obtain the symbol table of the kernel itself, and can't do anything about the symbols in the modules loaded when the kernel is running, and S2E is a virtual machine running on the host, we can directly obtain and find symbols from the memory of the client surface.

Linux2.6以后的版本引入了kallsyms功能,kallsyms是把内核中所用到的所有符号地址和名称连接进了内核文件,从而使得内核启动后会把kallsyms的信息加载到内存中方便内核调试。因此通过kallsyms机制的实现使得内存也存有一份System.map,因而可以利用kallsyms机制的原理来提取内核中的符号表,并且此表包含了系统启动后加载模块的符号信息。The version after Linux2.6 introduces the kallsyms function. Kallsyms connects all symbol addresses and names used in the kernel into the kernel file, so that after the kernel starts, the information of kallsyms will be loaded into the memory to facilitate kernel debugging. Therefore, the implementation of the kallsyms mechanism makes the memory also store a System.map, so the principle of the kallsyms mechanism can be used to extract the symbol table in the kernel, and this table contains the symbol information of the modules loaded after the system starts.

对记录的跟踪数据文件补充函数调用关系并转化标准格式,将数据上传至静态函数调用关系生成装置,Supplement the function call relationship to the recorded tracking data file and convert the standard format, upload the data to the static function call relationship generation device,

其中所述补充函数调用关系包括:根据调用和返回的进程号、线程号以及栈顶指针来把函数的调用和返回进行配对,同时获取函数的执行时间,同时把数据转化为标准格式;The supplementary function call relationship includes: pairing the call and return of the function according to the process number, thread number and stack top pointer of the call and return, simultaneously obtaining the execution time of the function, and converting the data into a standard format;

如图2所示,处理为标准数据之后,依次处理每个文件和目录内的动态函数调用关系文件。所述数据上传至静态函数调用关系生成装置包括:As shown in FIG. 2 , after being processed into standard data, each file and the dynamic function call relationship files in the directory are processed sequentially. The data uploaded to the static function call relationship generation device includes:

按FROM字段提供的目录和文件名,把记录分别复制到相应源代码文件的动态函数调用关系文件(.dynfctrlt)中;Copy the records to the dynamic function call relationship file (.dynfctrlt) of the corresponding source code file according to the directory and file name provided by the FROM field;

按照每个动态函数调用关系文件(.dynfctrlt)文件中的TO字段函数是否源自该文件,According to whether the TO field function in each dynamic function call relation file (.dynfctrlt) file originates from this file,

若不是该文件的则写入到相应源代码文件的动态函数对外调用关系文件(.dynoutlst),同时判断该文件是否源自该目录,若不是写入到对应目录的动态函数对外调用关系文件(.dynDoutlst);If it is not the file, then write the dynamic function external call relationship file (. .dynDoutlst);

根据最后一层目录的动态函数对外调用关系文件(.dynDoutlst)文件逐层返回上一级目录填写上一级目录的.dynDoutlst文件。According to the dynamic function external call relation file (.dynDoutlst) file of the last level directory, return the upper level directory layer by layer to fill in the .dynDoutlst file of the upper level directory.

进一步地,所述方法还包括显示所述函数调用关系图的步骤,以及对已生成的函数调用关系图和列表进行缓存的步骤,该步骤通过浏览器实现。Further, the method further includes a step of displaying the function call relationship diagram, and a step of caching the generated function call relationship diagram and list, and this step is realized through a browser.

所述方法具体运行过程如下:The specific operation process of the method is as follows:

第一步,环境要求以及必要的软件包的安装:The first step, environmental requirements and installation of necessary software packages:

1、主机环境ubuntu64 12.04 64位1. Host environment ubuntu64 12.04 64 bits

2、需要安装的包:2. Packages that need to be installed:

$sudo apt-get install build-essential$ sudo apt-get install build-essential

$sudo apt-get install subversion$ sudo apt-get install subversion

$sudo apt-get install git$ sudo apt-get install git

$sudo apt-get install gettext$ sudo apt-get install gettext

$sudo apt-get install liblua5.1-dev$ sudo apt-get install liblua5.1-dev

$sudo apt-get install libsdl1.2-dev$ sudo apt-get install libsdl1.2-dev

$sudo apt-get install libsigc++-2.0-dev$ sudo apt-get install libsigc++-2.0-dev

$sudo apt-get install binutils-dev$ sudo apt-get install binutils-dev

$sudo apt-get install python-docutils$ sudo apt-get install python-docutils

$sudo apt-get install python-pygments$ sudo apt-get install python-pygments

$sudo apt-get install nasm$ sudo apt-get install nasm

$sudo apt-get build-dep llvm-3.0$ sudo apt-get build-dep llvm-3.0

$sudo apt-get build-dep qemu$ sudo apt-get build-dep qemu

3、下载s2e的安装包并安装s2e3. Download the s2e installation package and install s2e

$mkdir S2EDIR$ mkdir S2EDIR

$cd$S2EDIR$cd $S2EDIR

$git clone https://github.com/dslab-epfl/s2e.git$mkdir build$ git clone https://github.com/dslab-epfl/s2e.git $mkdir build

$cd build$ cd build

$make–f../s2e/Makefile$ make –f ../s2e/Makefile

第二步,环境要求以及必要的软件包的安装:The second step, environmental requirements and installation of necessary software packages:

1、LinuxCallMonitor插件1. LinuxCallMonitor plugin

A、注册onTranslateBlockStart事件A. Register the onTranslateBlockStart event

B、获取调用和返回指令B. Get call and return instructions

C、调用符号表获取函数名、模块名C. Call the symbol table to obtain the function name and module name

D、输出调用事件包含函数名、模块名、事件发生时间、当前进程号、当前线程号以及当前栈顶指针D. The output call event includes function name, module name, event occurrence time, current process number, current thread number and current stack top pointer

具体内容如下:The specific content is as follows:

1.1初始化initialize1.1 initialization initialize

装载SymbolResolver,FunctionMonitor:(s2e()->getPlugin(“”));Load SymbolResolver, FunctionMonitor:(s2e()->getPlugin(""));

打开第一个写文件XXX-FuncTracer_00000.datOpen the first write file XXX-FuncTracer_00000.dat

注册块翻译事件(onTranslateBlockStart)Register block translation event (onTranslateBlockStart)

1.2 slotTranslateBlockStart事件1.2 slotTranslateBlockStart event

通过CallSignal检测call执行事件,Detect call execution events through CallSignal,

检测到call事件通过callHandler处理该事件The call event is detected and processed through callHandler

1.3 callHandler1.3 callHandler

通过地址获取相应函数名:SymbolResolver中的symtab_search函数实现;Obtain the corresponding function name through the address: the symtab_search function implementation in SymbolResolver;

同时计算call和ret事件的次数,如果次数超过20000000,则打开一个新的写文件,同时计数清零;Simultaneously count the number of call and ret events. If the number exceeds 20000000, open a new write file and clear the count at the same time;

注册ret执行的回调函数,检测函数的返回并处理返回信息retHandler;Register the callback function executed by ret, detect the return of the function and process the return information retHandler;

输出事件发生时间、进程号、线程号、栈顶指针、模块名、函数名。Output event occurrence time, process number, thread number, stack top pointer, module name, function name.

1.4 retHandler1.4 retHandler

计算call和ret的次数,如果次数超过20000000,则打开一个新的写文件,同时计数清零;Count the number of call and ret, if the number exceeds 20000000, open a new write file, and clear the count at the same time;

输出事件发生时间、进程号、线程号、栈顶指针。Output the event occurrence time, process ID, thread ID, and stack top pointer.

2、SymbolResolver插件2. SymbolResolver plugin

A、获取内核、模块符号表A. Obtain the kernel and module symbol table

B、解析vmlinux文件elf格式获取函数名和函数所在行号B. Analyze the elf format of the vmlinux file to obtain the function name and line number where the function is located

C、形成符号列表:地址,函数名,函数所在行号C. Form a symbol list: address, function name, line number of the function

2.1初始化initialize2.1 initialization initialize

加载system.map、vmlinux;Load system.map, vmlinux;

调用read_vm()获取函数入口地址对应的函数名、函数所在文件及行号的列表;Call read_vm() to obtain the function name corresponding to the function entry address, the list of the file where the function is located and the line number;

读取system.map,解析该符号表,根据地址和函数名以及read_vm()获取的函数所在文件及行号,补全函数信息,并记录到函数列表数组中addrsym_tab[];根据符号信息记录符号表开始结束以及其它地址信息,主要有:__start__ksymtab、__stop__ksmtab、kallsyms_addresses(所有符号地址)、kallsyms_num_syms(符号总数)、kallsyms_names、kallsyms_markers、kallsyms_token_table、kallsyms_token_index、modules,它们对应的地址信息。Read system.map, parse the symbol table, complete the function information according to the address and function name and the file and line number of the function obtained by read_vm(), and record it in the function list array addrsym_tab[]; record symbols according to the symbol information The start and end of the table and other address information mainly include: __start__ksymtab, __stop__ksmtab, kallsyms_addresses (all symbol addresses), kallsyms_num_syms (total number of symbols), kallsyms_names, kallsyms_markers, kallsyms_token_table, kallsyms_token_index, modules, and their corresponding address information.

读取模块符号表,获取模块的函数符号表,并记录到数组中addrmod_tab[]。Read the module symbol table, get the function symbol table of the module, and record it in the array addrmod_tab[].

2.2symtab_search2.2 symtab_search

根据地址返回函数名、函数所在文件及行号。Return the function name, the file where the function is located and the line number according to the address.

如果给定的地址在addrsym_tab[]找到,则返回kernel(模块名)和函数名;If the given address is found in addrsym_tab[], return the kernel (module name) and function name;

如果给定的地址在addrmod_tab[]找到,则返回模块名(系统)和函数名;If the given address is found in addrmod_tab[], return the module name (system) and function name;

否则:otherwise:

从内存中读取kallsyms_num_syms(符号总数);从内存中kallsyms_addresses之后一次读取符号地址判断与需查询地址是否一致,并记录内存位置;从记录位置读取内存信息为函数名索引地址,如果查到则根据索引地址和符号地址起始地址读取符号名长度,计算出所查地址的偏移,获取函数名长度,进而返回函数名;否则在加载模块的符号表中读取相应的函数名Read kallsyms_num_syms (total number of symbols) from the memory; read the symbol address once after kallsyms_addresses in the memory to judge whether it is consistent with the address to be queried, and record the memory location; read the memory information from the record location as the function name index address, if found Then read the length of the symbol name according to the index address and the start address of the symbol address, calculate the offset of the searched address, obtain the length of the function name, and then return the function name; otherwise, read the corresponding function name in the symbol table of the loaded module

2.3search_func_line、read_vm、describe_elf_hdr、dir_file_table、describe_one_section、describe_elf_sections、dwarf_tag_name、dwarf_attr_name、is_compile_unit、output_compilation_unit_header、read_1_byte、read_signed_leb128、describe_one_compile_unit等是解析vmlinux文件的elf格式获取函数入口地址以及对应函数名及函数所在文件行号的函数和依赖函数,这里不在叙述其原理和过程。2.3search_func_line、read_vm、describe_elf_hdr、dir_file_table、describe_one_section、describe_elf_sections、dwarf_tag_name、dwarf_attr_name、is_compile_unit、output_compilation_unit_header、read_1_byte、read_signed_leb128、describe_one_compile_unit等是解析vmlinux文件的elf格式获取函数入口地址以及对应函数名及函数所在文件行号的函数And dependent functions, the principle and process are not described here.

第三步,编译s2e、运行s2e:The third step is to compile s2e and run s2e:

1、修改Makefile.target1. Modify Makefile.target

2、修改s2e/qemu/Makefile.target文件:2. Modify the s2e/qemu/Makefile.target file:

在s2eobj-y+=s2e/Plugins/ConsistencyModels.o之后添加两行:Add two lines after s2eobj-y+=s2e/Plugins/ConsistencyModels.o:

s2eobj-y+=s2e/Plugins/LinuxCallMonitor.os2eobj-y+=s2e/Plugins/LinuxCallMonitor.o

s2eobj-y+=s2e/Plugins/SymboleResolver.os2eobj-y+=s2e/Plugins/SymboleResolver.o

3、编译s2e3. Compile s2e

4、编译对应版本的内核,本项目的是linux-3.5.4,cpu是32位:即make i386_defconfig。4. Compile the corresponding version of the kernel, this project is linux-3.5.4, the cpu is 32 bits: namely make i386_defconfig.

为了获取函数定义行号,因而在编译内核时需要勾选debug信息:menuconfig中Kernel hacking选项,选中kernel debugging和Compile kernel with debug info。In order to obtain the function definition line number, you need to check the debug information when compiling the kernel: Kernel hacking option in menuconfig, select kernel debugging and Compile kernel with debug info.

编译完成后arch/x86/boot/bzIamge,vmliux,System.map,在s2e运行中需要用到的。After the compilation is complete, arch/x86/boot/bzIamge, vmliux, and System.map need to be used in s2e operation.

5、配置config.lua5. Configure config.lua

6、创建系统s2e运行系统盘6. Create system s2e running system disk

A、复杂系统:A. Complex system:

a、创建空盘a. Create an empty disk

qemu-img create–f raw name.raw*G;name镜像名,*G该盘的大小为多少Gqemu-img create–f raw name.raw*G; name image name, *G What is the size of the disk in G

b、安装系统,使用不带s2e的qemub. Install the system, use qemu without s2e

qemu-system-i386name.raw–cdrom***.iso;***.iso系统安装文件,从cdrom安装。qemu-system-i386name.raw–cdrom***.iso; ***.iso system installation file, installed from cdrom.

c、磁盘类型转换;s2e只能接受qcow2类型的磁盘c. Disk type conversion; s2e can only accept qcow2 type disks

qemu-img convert–c name.raw–o qcow2new-name.qcow2qemu-img convert –c name.raw –o qcow2new-name.qcow2

d、测试系统能否正常启动;不带s2ed. Test whether the system can start normally; without s2e

qemu-system-i386–kernel bzImage–hdc name.raw-append“/root/sda1”;bzImage之前编译的内核镜像qemu-system-i386–kernel bzImage–hdc name.raw-append “/root/sda1”; the kernel image compiled before bzImage

B、简单系统busybox(www.cnblogs.com/senix/archive/2013/02/21/2921221.html)B. Simple system busybox (www.cnblogs.com/senix/archive/2013/02/21/2921221.html)

a、下载busybox源码:a. Download busybox source code:

我下载的是busybox-1.21.0,I downloaded busybox-1.21.0,

解压:tar–xf busybox-1.21.0.tar.bz2Decompression: tar–xf busybox-1.21.0.tar.bz2

b、编译busyboxb. Compile busybox

make deconfigmake deconfig

make menuconfig:修改Busybox Settings Build Option[*]Build Busybox asa static binary(no shared libs)make menuconfig: Modify Busybox Settings Build Option[*]Build Busybox asa static binary(no shared libs)

makemake

make installmake install

c、通过qemu模拟linuxc. Simulate linux through qemu

(1)、编写initrd启动脚本(1), write initrd startup script

(2)、编写构建initrd镜像脚本(2), write the script to build the initrd image

(3)、编写启动脚本,测试busybox(3), write startup script, test busybox

7、运行s2e记录执行trace7. Run s2e to record execution trace

编写自动运行脚本run.shWrite an automatic run script run.sh

A、复杂系统A. Complex system

“#!/bin/sh"#!/bin/sh

i386-s2e-softmmu/qemu-system-i386-kernel arch/x86/boot/bzImage-hdcnew-name.qcow2-append"root=/dev/sda1"-s2e-config-file config.lua-s2e-verbosei386-s2e-softmmu/qemu-system-i386-kernel arch/x86/boot/bzImage-hdcnew-name.qcow2-append "root=/dev/sda1"-s2e-config-file config.lua-s2e-verbose

"

B、简单系统B. Simple system

“#!/bin/sh"#!/bin/sh

LINUX=$(find linux*-maxdepth 0)LINUX=$(find linux*-maxdepth 0)

i386-s2e-softmmu/qemu-system-i386–kernel$LINUX/arch/i386/boot/bzImage–initrd rootfs.img–append“root=/dev/ram rdinit=sbin/init”–s2e-config-file config.lua–rtc clock=vmi386-s2e-softmmu/qemu-system-i386 --kernel $LINUX/arch/i386/boot/bzImage --initrd rootfs.img --append "root=/dev/ram rdinit=sbin/init" --s2e-config-file config .lua – rtc clock=vm

"

8、trace结果8. trace result

目前结果固定命名,放在/mnt/freenas/dyn-trace-log/b-FuncTracer_*.dat,该结果没行只显示call函数或返回,每个文件记录20000000指令。格式:At present, the result is fixedly named and placed in /mnt/freenas/dyn-trace-log/b-FuncTracer_*.dat. No line in the result only displays the call function or return, and each file records 20000000 instructions. Format:

calltime,pid,module,pc/call namecalltime, pid, module, pc/call name

9、结果处理9. Result processing

认为只有一个栈,栈顶为函数调用者。It is considered that there is only one stack, and the top of the stack is the function caller.

a、补齐函数调用关系:process.py。中间结果格式为:a. Complete the function call relationship: process.py. The intermediate result format is:

calltime,pid,module,tid,exp,pc/call name,from,pc/call name算法:calltime, pid, module, tid, exp, pc/call name, from, pc/call name algorithm:

栈顶为空对结果逐行扫描,如果为call行则把该call对应的函数压栈,谁调用该函数通过目前栈顶前一个内容获取;如果为ret则把线程、进程号以及栈顶指针相同栈内容出栈;直到结束。If the top of the stack is empty, scan the results line by line. If it is a call line, push the function corresponding to the call onto the stack. Whoever calls the function will obtain the previous content on the top of the stack; if it is ret, the thread, process number, and stack top pointer The same stack content is popped; until the end.

b、转化标准格式:s2eout-standardout.rb。格式为:b. Conversion standard format: s2eout-standardout.rb. The format is:

PID:pid TID:tid CALL_TIME:time RETURN_TIME:NULL FROM:call name,/file.c:line TO:call name1,/file1.c:line1AT:NULL time:function run timePID:pid TID:tid CALL_TIME:time RETURN_TIME:NULL FROM:call name,/file.c:line TO:call name1,/file1.c:line1 AT:NULL time:function run time

注:目前没有在什么地方调用该函数。Note: There is currently no place to call this function.

c、按FROM字段把数据分别存放到相应目录中相应源代码文件的动态函数调用关系文件(.dynfctrlt文件)中:systemtapdata.rbc. Store the data in the dynamic function call relationship file (.dynfctrlt file) of the corresponding source code file in the corresponding directory according to the FROM field: systemtapdata.rb

数据格式不变,首先按FROM字段提供的目录和文件名,把b记录的结果分别复制到相应源代码文件的.dynfctrlt文件中。其次按照每个.dynfctrlt文件中的TO字段函数是否源自该文件,如果不是该文件的则写入到相应源代码文件的.dynoutlst文件,同时判断该文件是否源自该目录,否写入到对应目录的.dynDoutlst文件。最后根据最后一层目录的.dynDoutlst文件逐层返回上一级目录填写上一级目录的.dynDoutlst文件。The data format remains unchanged. First, according to the directory and file name provided by the FROM field, copy the results of record b to the .dynfctrlt file of the corresponding source code file. Secondly, according to whether the TO field function in each .dynfctrlt file originates from the file, if not, write it into the .dynoutlst file of the corresponding source code file, and judge whether the file originates from the directory, or write it to The .dynDoutlst file of the corresponding directory. Finally, according to the .dynDoutlst file of the last layer directory, return to the upper level directory layer by layer to fill in the .dynDoutlst file of the upper level directory.

以上,仅为本发明的较佳实施例,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求所界定的保护范围为准。The above are only preferred embodiments of the present invention, but the scope of protection of the present invention is not limited thereto. Any changes or substitutions that can be easily conceived by those skilled in the art within the technical scope disclosed in the present invention are all Should be covered within the protection scope of the present invention. Therefore, the protection scope of the present invention should be defined by the claims.

Claims (4)

1. a kind of method that kinematic function call relation is determined based on register transfer language, it is characterised in that:
Methods described includes:
Detection function calls execution event in system operation,
If detecting after call instruction, the corresponding function name in function entrance address of the instruction calls is parsed, statistics instructs number of times, Output function name, time of origin, affiliated process number, affiliated thread number, affiliated top-of-stack pointer and module No. are called, and be saved in Track data file;
If after the instruction of detection is return instruction, output time, affiliated process number, affiliated thread number and affiliated top-of-stack pointer are arrived Track data file;
The data format that processing obtains preassigned is carried out to the track data file, the track data file after processing is passed Transport in static function call relation generating means, generate the kinematic function calling figure of described function call relation.
2. the method according to claim 1 that kinematic function call relation is determined based on register transfer language, its feature It is:The generation method of the track data file includes:
File and the row of line number where obtaining the corresponding function name in function entrance address, function by the parsing to file destination Table;
Operating system nucleus symbol table is parsed, function entrance address and function name is obtained, is searched and obtained according to address and function name Function where file and line number completion function information, and recorded in function list array;
Read module symbol table, the functional symbol table of acquisition module, and recorded in modularity function list array;
If given address is found in function list array, module name and function name are returned;
If given address is found in modularity function list array, the module name and function name of return system;
If given address can not find in the function list array and the modularity function list array, discriminant function is It is no to exist in internal memory,
If existing in internal memory, memory address is read from internal memory, be successively read after this address symbolic address judge with Address need to be inquired about whether consistent, and record core position, it is function name index address to read memory information from record position, if looking into To then symbolic name length is read according to index address and symbolic address initial address, the skew of looked into address is calculated, letter is obtained Several length, and then return function name;
If being not present in internal memory, read in the symbol table of load-on module in corresponding function name, slave module and read internal memory Address, passes through the function name of module's address acquisition module.
3. the method according to claim 1 that kinematic function call relation is determined based on register transfer language, its feature It is:To the track data file supplement function calling relationship and transformation standard form of record, data are uploaded to static function Call relation generating means,
Wherein described supplement function calling relationship includes:According to the process number for calling and returning, thread number and top-of-stack pointer come Function is called and come back for pairing, while the execution time of function is obtained, while data are converted into reference format;
The data, which are uploaded to static function call relation generating means, to be included:
The catalogue and filename provided by FROM fields, the kinematic function that record is copied to corresponding source code file respectively is called In relational file;
Judge whether the function call is derived from this document according to the TO fields in each kinematic function call relation file,
If not the external call relation file of kinematic function for being then written to correspondence source code file of this document, while judging to be somebody's turn to do Whether file is derived from the catalogue, if not being written to the external call relation file of kinematic function of correspondence catalogue;
Upper level catalogue is successively returned to according to the external call relation file of the kinematic function of last layer of catalogue and fills in upper level mesh The external call relation file of kinematic function of record.
4. the method according to claim 1 that kinematic function call relation is determined based on register transfer language, its feature It is:The step of methods described also includes showing the function call relationship graph, and the function call relationship graph to having generated The step of being cached with list.
CN201410015881.4A 2014-01-14 2014-01-14 The method that kinematic function call relation is determined based on register transfer language Expired - Fee Related CN103761089B (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410015881.4A CN103761089B (en) 2014-01-14 2014-01-14 The method that kinematic function call relation is determined based on register transfer language

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410015881.4A CN103761089B (en) 2014-01-14 2014-01-14 The method that kinematic function call relation is determined based on register transfer language

Publications (2)

Publication Number Publication Date
CN103761089A CN103761089A (en) 2014-04-30
CN103761089B true CN103761089B (en) 2017-09-15

Family

ID=50528333

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410015881.4A Expired - Fee Related CN103761089B (en) 2014-01-14 2014-01-14 The method that kinematic function call relation is determined based on register transfer language

Country Status (1)

Country Link
CN (1) CN103761089B (en)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106959859B (en) * 2017-03-30 2021-08-24 北京奇虎科技有限公司 System call function calling method and device
CN108874470B (en) * 2017-05-11 2023-04-07 腾讯科技(深圳)有限公司 Information processing method, server and computer storage medium
CN107291480B (en) * 2017-08-15 2020-12-15 中国农业银行股份有限公司 Function calling method and device
CN109426702B (en) * 2017-08-31 2021-05-28 武汉斗鱼网络科技有限公司 iOS platform file reading protection method, storage medium, electronic device and system
CN108628744B (en) * 2018-04-28 2022-03-15 深圳市风云实业有限公司 Fault diagnosis method and device and electronic equipment
CN110737465B (en) * 2018-07-20 2023-09-22 深圳市大梦龙途网络科技有限公司 Method and related device for acquiring function call path
CN111258630B (en) * 2018-12-03 2023-05-30 斑马智行网络(香港)有限公司 Function call relationship detection method, device, equipment and storage medium
CN109614332B (en) * 2018-12-07 2021-11-02 中国航空工业集团公司洛阳电光设备研究所 A Hierarchical Modeling Method for Hardware Virtualization
CN110659088B (en) * 2019-09-20 2022-11-25 浙江杰芯科技有限公司 Method and system for expanding program under embedded environment
CN111104104A (en) * 2019-11-04 2020-05-05 珠海亿智电子科技有限公司 Method and device for visualizing function call time and statistical result and readable medium
CN112181374B (en) * 2020-09-25 2024-03-12 广州力挚网络科技有限公司 Data integration method and device, electronic equipment and storage medium
CN112363779A (en) * 2020-11-25 2021-02-12 王志平 Safety control method for dynamic link program
WO2022155937A1 (en) * 2021-01-23 2022-07-28 王志平 Security control method for dynamic link program
CN113505007A (en) * 2021-07-12 2021-10-15 北京鲸鲮信息系统技术有限公司 Protocol stack data transmission method based on Linux system, computer equipment and storage medium
CN113946347B (en) * 2021-09-29 2022-07-08 北京五八信息技术有限公司 Function call detection method and device, electronic equipment and readable medium
CN119597348A (en) * 2023-09-08 2025-03-11 杭州阿里云飞天信息技术有限公司 Method, device and equipment for determining thread call information
CN116909627B (en) * 2023-09-13 2023-12-12 杭州笨马网络技术有限公司 Executable program analysis method and device, electronic equipment and storage medium
CN117149499B (en) * 2023-10-30 2024-01-19 北京麟卓信息科技有限公司 Memory occupation optimization method for kernel module based on dynamic symbol table

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6282701B1 (en) * 1997-07-31 2001-08-28 Mutek Solutions, Ltd. System and method for monitoring and analyzing the execution of computer programs
CN103365774A (en) * 2013-08-22 2013-10-23 北京航空航天大学 Transient error detection method based on function call relationship

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8990792B2 (en) * 2008-05-26 2015-03-24 Samsung Electronics Co., Ltd. Method for constructing dynamic call graph of application

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6282701B1 (en) * 1997-07-31 2001-08-28 Mutek Solutions, Ltd. System and method for monitoring and analyzing the execution of computer programs
CN103365774A (en) * 2013-08-22 2013-10-23 北京航空航天大学 Transient error detection method based on function call relationship

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
S2E: A Platform for In-Vivo Multi-Path Analysis of Software Systems;Vitaly Chipounov等;《ACM SINGARCH Computer Architecture News》;1-4;20111231;第39卷(第1期);第265-278页 *
SimSight:a virtual machine based dynamic call graph generator;XuelingChen;《University of Nebraska-Lincoln硕士学位论文》;20101231;摘要,第8、18-30页 *

Also Published As

Publication number Publication date
CN103761089A (en) 2014-04-30

Similar Documents

Publication Publication Date Title
CN103761089B (en) The method that kinematic function call relation is determined based on register transfer language
US9134966B2 (en) Management of mixed programming languages for a simulation environment
Romano et al. An empirical study of bugs in webassembly compilers
US5956479A (en) Demand based generation of symbolic information
EP2359247B1 (en) Transforming user script code for debugging
CN107526625B (en) Java intelligent contract security detection method based on bytecode inspection
Gebhart et al. Running PARSEC 2.1 on M5
Møller et al. Model-based testing of breaking changes in Node. js libraries
Rischpater Application development with qt creator
Liu Android native development kit cookbook
Hsiao et al. Synthesizing formal models of hardware from RTL for efficient verification of memory model implementations
Alpay et al. One pass to bind them: The first single-pass sycl compiler with unified code representation across backends
CN102722438B (en) Kernel debugging method and equipment
Soubra et al. Towards Universal COSMIC Size Measurement Automation.
CN104461880B (en) The method and system of automatic detection memory overwriting in a kind of embedded system
Liška Optimizing large applications
US9069900B2 (en) Method for determining whether a machine code instruction of a machine code program is executed in the machine code program
US8843908B2 (en) Compiler validation via program verification
Baumann et al. Cudagrind: Memory-usage checking for cuda
CN101339507A (en) Method for creating embedded program operation symbol table
US20230102562A1 (en) Multi-stage automatic compilation for vector computations in applications
Vasquez et al. Mastering Embedded Linux Programming: Create Fast and Reliable Embedded Solutions with Linux 5.4 and the Yocto Project 3.1 (Dunfell)
Meyer et al. A scriptable standard-compliant reporting and logging framework for systemC
Pekarek et al. trcview: interactive architecture agnostic execution trace analysis
Steinert et al. Object versioning to support recovery needs: Using proxies to preserve previous development states in lively

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170915

Termination date: 20190114