图像数据处理流程的跟踪方法、计算设备及存储介质与流程

文档序号:36936846发布日期:2024-02-02 22:04阅读:21来源:国知局
图像数据处理流程的跟踪方法、计算设备及存储介质与流程

本发明涉及软件开发,尤其涉及一种图像数据处理流程的跟踪方法、计算设备及存储介质。


背景技术:

1、目前,在软件开发和维护过程中,调试是一个必不可少的环节。随着软件复杂度越来越高,可用的第三方功能库越来越多,不可避免会用到大量没有源码的第三方功能库,特别是平台型软件,需要大量使用第三方功能库。当软件处理流程出现问题时,由于没有源码,也不了解第三方功能库的内部处理流程,在定位问题时,不得不对第三方功能库进行反汇编,然后配合调试器,手动分析数据的处理流程,这样常常会占用很多时间。尤其是对于数据处理类的程序(例如图像编解码程序),在调用第三方链接库之后如果出现运行时数据错误,其中涉及大量数据运算过程,若其中的某些步骤出错而导致数据错误,程序本身并不会崩溃,但可能导致的结果是最终显示出来的图片与预期有所出入。针对此类错误,由于第三方链接库的代码是闭源的,又并非程序崩溃可以提供相应的线索,只能通过调试获得程序运行过程中的相关数据流,非常繁琐,并且对技术要求较高。闭源代码的调试,在跨系统的软件迁移应用(例如wine应用)中大量存在。

2、现有技术中,对于没有源码的第三方功能库进行调试、跟踪数据处理流程的常用方法是,断点调试加上人工手动分析反汇编代码。通过断点调试,找出进入第三方功能库的函数地址及传入的参数信息,然后反汇编功能库的动态链接库dll文件,通过人工手动分析反汇编出的汇编代码,找到数据流向或分支的位置,再配合调试器进行逐步的跟踪,并记录处理流程。为了对现有的技术方案进行具体说明,假设开发者编写的程序a.exe在调用无源码的第三方功能库b.dll的某一函数func_1后,得到的输出数据与预期不一致,则需要分析func_1函数中对输入数据的处理流程,以便定位问题原因。由于没有源码,通常的做法是使用反汇编工具(例如idapro、objdump等工具)对b.dll进行反汇编,在汇编代码中找到func_1函数的汇编实现,并手动分析func_1函数中对输入数据的处理流程。如果在func_1函数中又调用了其他函数,例如函数func_2,则需要进一步找到func_2,并对func_2中处理数据的流程进行分析,如此循环分析函数中的数据处理流程,直到没有调用其他函数来处理func_1的输入参数、或func_1处理输入参数之后的数据为止。进而,结合分析出的数据处理流程,使用调试器在关键节点(例如数据处理开始位置、处理数据的函数调用位置等)添加断点,逐一查看结果是否符合预期。

3、现有技术方案存在以下缺陷:人工分析汇编代码对开发人员的要求比较高,同时,在代码执行过程中分支较多,调用层次一般也比较多,导致工作量很大,而且分析过程中很容易出错;手动逐步添加大量断点,导致调试效率比较低,并且需要结合大量调试技巧,例如读写断点的配合使用;调试时间随程序算法复杂度呈指数级上升,导致定位一个bug需要耗费大量时间,对于部分数据流冗长的代码更是如此。

4、为此,需要一种图像数据处理流程的跟踪方法,以解决上述技术方案中存在的问题。


技术实现思路

1、为此,本发明提供一种图像数据处理流程的跟踪方法,以解决或至少缓解上面存在的问题。

2、根据本发明的一个方面,提供一种图像数据处理流程的跟踪方法,在计算设备中执行,所述计算设备中包括应用程序,所述应用程序适于调用功能库文件以对源图像数据进行处理,所述功能库文件中包括多条内存访问指令,所述内存访问指令处适于添加软件断点,所述方法包括:响应于所述应用程序运行至当前软件断点,将所述当前软件断点对应的当前内存访问指令的访问地址与所述源图像数据的初始内存地址进行比对;如果所述访问地址与所述初始内存地址相匹配,则记录所述当前内存访问指令位置,并记录所述当前内存访问指令根据所述初始内存地址从内存中读取预定长度的初始待处理数据的位置;根据所述当前内存访问指令对所述初始待处理数据进行处理,将处理结果数据写入内存作为新的待处理数据,并记录所述处理结果数据写入的内存地址,作为所述源图像数据的新的内存地址;响应于所述应用程序运行至下一个软件断点,将所述下一个软件断点对应的下一条内存访问指令的访问地址与所述源图像数据的新的内存地址进行比对,循环执行上述步骤,直到内存访问指令的访问地址与所述源图像数据的内存地址不匹配为止,以生成最终处理结果数据,并得到将所述初始待处理数据处理为所述最终处理结果数据的数据流。

3、可选地,在根据本发明的图像数据处理流程的跟踪方法中,在响应于所述应用程序运行至当前软件断点之前,包括:获取待调试的功能库文件,对所述功能库文件进行反汇编处理,生成反汇编文件;对所述反汇编文件进行分析,以筛选出多条内存访问指令;响应于所述应用程序加载所述功能库文件,在每条内存访问指令处添加软件断点。

4、可选地,在根据本发明的图像数据处理流程的跟踪方法中,还包括:记录每条内存访问指令的地址;在每条内存访问指令处添加软件断点,包括:基于每条内存访问指令的地址,将每条内存访问指令的指令码修改为0xcc。

5、可选地,在根据本发明的图像数据处理流程的跟踪方法中,将所述当前软件断点对应的当前内存访问指令的访问地址与所述源图像数据的初始内存地址进行比对,包括:判断所述访问地址对应的位置是否是内存;如果是,则确定所述访问地址对应的目标内存地址,将该目标内存地址与所述源图像数据的初始内存地址进行比对。

6、可选地,在根据本发明的图像数据处理流程的跟踪方法中,记录所述当前内存访问指令根据所述初始内存地址从内存中读取预定长度的初始待处理数据的位置,包括:记录从内存中读取的所述初始待处理数据指向的第一寄存器;记录所述处理结果数据写入的内存地址,包括:跟踪所述处理结果数据所在的第二寄存器,并记录将所述处理结果数据从所述第二寄存器写入的内存地址,将所述写入的内存地址作为所述源图像数据的新的内存地址。

7、可选地,在根据本发明的图像数据处理流程的跟踪方法中,记录所述处理结果数据写入的内存地址,包括:利用反汇编引擎,对所述当前内存访问指令进行反汇编处理,以便分析所述当前内存访问指令,确定所述处理结果数据写入的内存地址。

8、可选地,在根据本发明的图像数据处理流程的跟踪方法中,所述功能库文件中包括图像处理函数,所述方法还包括:在所述应用程序运行到所述图像处理函数之前,预先保存所述源图像数据的初始内存地址。

9、可选地,在根据本发明的图像数据处理流程的跟踪方法中,所述内存访问指令为mov指令。

10、根据本发明的一个方面,提供一种计算设备,包括:至少一个处理器;存储器,存储有程序指令,其中,程序指令被配置为适于由上述至少一个处理器执行,所述程序指令包括用于执行如上所述的图像数据处理流程的跟踪方法的指令。

11、根据本发明的一个方面,提供一种存储有程序指令的可读存储介质,当该程序指令被计算设备读取并执行时,使得该计算设备执行如上所述的图像数据处理流程的跟踪方法。

12、根据本发明的技术方案,提供了一种图像数据处理流程的跟踪方法200,其中,预先对第三方功能库文件中的每条内存访问指令进行断点处理,当应用程序运行至当前软件断点时,将当前软件断点对应的当前内存访问指令的访问地址与源图像数据的初始内存地址进行比对,如果匹配,则记录当前内存访问指令位置,并记录当前内存访问指令根据初始内存地址从内存中读取预定长度的初始待处理数据的位置。根据当前内存访问指令对初始待处理数据进行处理,将处理结果数据写入内存作为新的待处理数据,并记录处理结果数据写入的内存地址,作为源图像数据的新的内存地址,这样便得到一次数据流。进而,继续运行应用程序至下一个软件断点,循环执行上述步骤,上一次处理结果数据的内存地址,会被下一次数据流读取,并在进行处理之后再次写入内存。这样,最后可以生成最终处理结果数据,并得到将初始待处理数据处理为最终处理结果数据的数据流。这样,通过自动分析汇编代码可以高效地分析出图像数据的处理流程,根据形成的数据流以及记录的内存访问指令的位置,可以快速反应出每个处理结果数据对应的内存访问指令,便于进一步定位异常问题。并且,通过每次记录的数据流,可以了解图像处理函数运用的算法,以便弥补wine应用中的函数缺失或不足。这样,根据本发明的技术方案,可以快速定位图像数据处理流程中出现的异常问题,例如图像色彩异常、数据不完整等问题。

13、上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1