CN116820419A - 源代码校验方法及非暂态计算机可读存储介质装置 - Google Patents
源代码校验方法及非暂态计算机可读存储介质装置 Download PDFInfo
- Publication number
- CN116820419A CN116820419A CN202210288737.2A CN202210288737A CN116820419A CN 116820419 A CN116820419 A CN 116820419A CN 202210288737 A CN202210288737 A CN 202210288737A CN 116820419 A CN116820419 A CN 116820419A
- Authority
- CN
- China
- Prior art keywords
- source code
- name
- target
- storage area
- return instruction
- 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.)
- Pending
Links
- 238000012795 verification Methods 0.000 title claims abstract description 45
- 238000000034 method Methods 0.000 title claims abstract description 27
- 238000013507 mapping Methods 0.000 claims abstract description 29
- 230000006870 function Effects 0.000 description 133
- 238000010586 diagram Methods 0.000 description 12
- 238000007689 inspection Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
- Indexing, Searching, Synchronizing, And The Amount Of Synchronization Travel Of Record Carriers (AREA)
Abstract
本发明提供一种源代码校验方法包括:使编译器根据高阶源代码文件产生映射文件及低阶源代码文件;从映射文件取得目标函数信息;从低阶源代码文件找到目标源代码文件;从目标源代码文件获取目标函数信息的目标函数名的第一返回指令;遍历低阶源代码文件以取得各调用模组名与各调用函数名的第二返回指令;从映射文件取得各调用模组名的第二储存区域;根据目标函数信息的第一储存区域、第一返回指令、每一第二储存区域与每一第二返回指令判断各调用函数名对目标函数名的调用是否符合分页切换编写格式;以及当判定不符分页切换编写格式时产生校验失败结果。
Description
技术领域
本发明涉及源代码的校验,尤其涉及一种基于分页切换编写格式的源代码校验方法及非暂态计算机可读存储介质装置。
背景技术
小型设备C语言编译器(Small Device C Compiler,SDCC)为一种专用于开发8051源代码的开源工具(open source tool)。小型设备C语言编译器具有一预定格式,即如果发生跨页调用其他函数的情形,需在被调用函数的定义位置以及调用函数的调用声明处分别添加调用关键字“__banked”。然而,在使用小型设备C语言编译器开发8051源代码时,其并不会自动检查源代码是否违反此预定格式。因此,即便违反了也不会跑出编译警告或错误。如此一来,可能导致执行此错误源代码的硬件发生程序卡死或其他重大问题,进而影响到8051产品的品质。
发明内容
本发明提供一种源代码校验方法。在一实施例中,源代码校验方法包括:利用编译器根据至少一高阶源代码文件产生映射文件及至少一低阶源代码文件;从映射文件取得目标函数信息,其中目标函数信息包括目标函数名、目标函数名所属的目标模组名与目标函数名的入口地址所在的第一储存区域;根据目标模组名从至少一低阶源代码文件中找到对应的目标源代码文件;从目标源代码文件中获取对应目标函数名的第一返回指令;遍历至少一低阶源代码文件以取得调用目标函数名的至少一调用模组名与至少一调用函数名对应的第二返回指令;从映射文件取得对应至少一调用模组名所在的第二储存区域;根据第一储存区域、第一返回指令、每一第二储存区域及每一第二返回指令判断各调用函数名对目标函数名的调用是否符合分页切换编写格式;以及当判定不符合分页切换编写格式时,产生校验失败结果。
本发明还提供一种非暂态计算机可读存储介质装置。在一实施例中,非暂态计算机可读存储介质装置储存至少一程序。当电子装置载入并执行非暂态计算机可读存储介质装置所储存的至少一程序时,该至少一程序致使电子装置执行以下步骤:利用编译器根据至少一高阶源代码文件产生映射文件及至少一低阶源代码文件;从映射文件取得目标函数信息,其中目标函数信息包括目标函数名、目标函数名所属的目标模组名与目标函数名的入口地址所在的第一储存区域;根据目标模组名从至少一低阶源代码文件中找到对应的目标源代码文件;从目标源代码文件中获取对应目标函数名的第一返回指令;遍历至少一低阶源代码文件以取得调用目标函数名的至少一调用模组名与至少一调用函数名对应的第二返回指令;从映射文件取得对应至少一调用模组名所在的第二储存区域;根据第一储存区域、第一返回指令、每一第二储存区域及每一第二返回指令判断各调用函数名对目标函数名的调用是否符合分页切换编写格式;以及当判定不符合分页切换编写格式时,产生校验失败结果。
下文在具体实施方式中详细叙述了本发明的详细特征以及优点,其内容足以使任何本技术领域中具有普通知识的技术人员了解本发明的技术内容并据以实施,且根据本说明书所揭露的内容、申请专利范围及附图,任何本技术领域中具有普通知识的技术人员可轻易地理解本发明的相关目的及优点。
附图说明
图1为非暂态计算机可读存储介质装置与电子装置的一实施例的模块图。
图2为多个分页的一实施例的概要示意图。
图3为程序码校验方法的一实施例的流程示意图。
图4为步骤S70的一实施例的流程示意图。
图5为编译器根据高阶程序码文件产生映射文件与低阶程序码文件的一实施例的概要示意图。
图6为映射文件中关于共用区部分的一实施例的示意图。
图7为映射文件中关于储存区Bank1部分的一实施例的示意图。
图8为映射文件中关于储存区Bank7部分的一实施例的示意图。
图9为C语言函数在定义处有添加调用关键字的一实施例的示意图。
图10为图9对应的低阶程序码文件的一实施例的示意图。
图11为在声明调用处有添加调用关键字的一实施例的示意图。
图12为图11对应的低阶程序码文件的一实施例的示意图。
图13为C语言函数在定义处未添加调用关键字时对应的低阶程序码文件的一实施例的示意图。
图14为在声明调用处未添加调用关键字时对应的低阶程序码文件的一实施例的示意图。
附图标记说明:
100:非暂态计算机可读存储介质装置 200:电子装置
210:编译器 220:储存器 A1-AN:低阶源代码文件
Bank1-Bank32:储存区 C1-CN:高阶源代码文件 COM:共用区
K1:调用关键字 M1:映射文件 P1-P32:分页
R1:第一返回指令 R2:第二返回指令 R3:一般返还指令
R4:一般呼叫指令 T1:目标函数信息 T11:目标函数名
T12:目标模组名 T13:第一储存区域 TF:目标源代码文件
S10-S120:步骤 S71:步骤 S73-S74:步骤
具体实施方式
为使本发明的实施例的上述目的、特征和优点能更明显易懂,下文配合所附附图,作详细说明如下。
请参阅图1,本发明任一实施例的源代码校验方法可由非暂态计算机可读存储介质装置100来实现。非暂态计算机可读存储介质装置100用于储存至少一程序,以当电子装置200载入并执行此至少一程序后,此至少一程序能致使电子装置200执行本发明任一实施例的源代码校验方法。在执行本发明任一实施例的源代码校验方法后,如图5、图9与图11所示,电子装置200便可有效地确认出在至少一高阶源代码文件C1-CN中是否错漏了调用位于另一储存区的函数时所需添加的调用关键字K1(即“__banked”),以避免后续在将低阶源代码文件A1-AN组译(Assemble)为机械码并交由处理器(例如,8051单片机)来执行后,处理器会因高阶源代码文件C1-CN中所错漏的调用关键字K1而发生卡死或其他重大问题。因此,本发明任一实施例的源代码校验方法可提高源代码的开发效率以及执行此源代码的应用产品的品质。
在一些实施例中,非暂态计算机可读存储介质装置100可为电子装置200内部的储存器220。在另一些实施例中,非暂态计算机可读存储介质装置100可为远端储存元件,并且经由有线或无线的方式通讯于电子装置200。在又一些实施例中,非暂态计算机可读存储介质装置100可为电子装置200外部的储存元件,并经由电子装置200的读取器或连接器连接并存取此储存元件的源代码。在一些实施例中,储存器220可由一个或多个储存元件实现,并且各储存元件可为但不限于非易失性存储器,例如只读存储器(ROM)或闪存(Flashmemory)等或易失性存储器,例如随机存取存储器(RAM)。此外,电子装置200可利用但不限于电脑、中央处理器(CPU)或专用集成电路(ASIC)等来实现。
请参阅图1至图5。在源代码校验方法的一实施例中,电子装置200可先利用一编译器210读取至少一高阶源代码文件C1-CN,并根据至少一高阶源代码文件C1-CN进行编译(Compile),以形成至少一低阶源代码文件A1-AN(步骤S10)。高阶源代码文件C1与低阶源代码文件A1-AN储存在储存器220中。在一些实施例中,各高阶源代码文件C1可为程序设计者利用C语言撰写而成的源代码文件。各高阶源代码文件C1包括至少一个C语言函数。编译器210可为一种专用于开发8051源代码的小型设备C语言编译器(Small Device C Compiler,SDCC)。编译器210对各个模组以组合语言(Assembly Language)进行编译,以相应生成对应于高阶源代码文件C1-CN的低阶源代码文件A1-AN。低阶源代码文件A1-AN为汇编文件(asmfile)。各高阶源代码文件C1-CN与各低阶源代码文件A1-AN即分别为一软件模组。一般而言,各高阶源代码文件C1-CN分别与对应的低阶源代码文件A1-AN具有相同的模组名(档名)。换句话说,如果得知一高阶源代码文件C1-CN的档名(模组名),即可得知相对应的低阶源代码文件A1-AN的档名(模组名),反之亦然。因此,本说明书下文所提及的“模组名”泛指相对应的高阶源代码文件C1-CN和/或低阶源代码文件A1-AN的模组名。
一般来说,处理器能力有限,仅能支持有限的源代码寻址范围,例如8051的寻址范围仅能支持64千字节(KB)。如果源代码超过此寻址范围,一般会使用代码分页(Codebanking)的方式来扩充程序空间。代码分页是将程序储存空间划分成多个分页。以程序储存空间为2兆字节(MB)为例,如果想要以64千字节(KB)来将所有程序储存空间划分分页,共可分成32分页P1-P32,如图2所示。需注意的是,程序储存空间并不一定需要全部划分成分页,也可保留部分不做划分。各分页P1-P32可包括共用区COM与储存区Bank1-Bank32。
在编译过程中,编译器210会分析至少一高阶源代码文件C1-CN而产生一映射文件(map file)M1(步骤S10)。
在一些实施例中,映射文件M1储存在储存器220中。映射文件M1记载定义在每一共用区COM与储存区Bank1-Bank32的函数名、定义各函数名的模块的模组名,以及各函数名的入口地址。其中,每一函数名用于指示一个组合语言函数或一个C语言函数。一般来说,相对应的组合语言函数和C语言函数具有几乎相同的函数名,差异仅在于组合语言函数较C语言函数多了一前缀“_”。换句话说,如果得知一组合语言函数名,即可得知相对应的C语言函数,反之亦然。因此,本说明书下文所提及的“函数名”泛指相对应的组合语言函数和/或C语言函数的名称。
在取得映射文件M1后,电子装置200可从映射文件M1中取得作为当前检查目标的一目标函数信息T1(步骤S20)。于此,目标函数信息T1可包括目标函数名T11、定义此目标函数名T11的目标模组名T12以及目标函数名T11的入口地址所在的一第一储存区域T13。例如,如图8所示,“_rtk_gpio_output”为目标函数名T11。“_rtk_gpio”为目标模组名T12。“00074FE8”为入口地址,其中“0007”是储存区Bank7的代码,也即可根据“0007”得知其第一储存区域T13为储存区Bank7。
在步骤S20的一实施例中,电子装置200可先分析映射文件M1,以根据映射文件M1产生一函数列表。其中,函数列表包括可被调用的复数函数信息。之后,电子装置200便可从函数列表中取得这些函数信息中的一个来作为当前检查目标的目标函数信息T1。于此,每一函数信息可包括函数名、定义此函数名的模组的档名(模组名)以及此函数名的入口地址所在的储存区域。并且,目标函数信息T1的目标函数名T11、定义目标函数名T11的目标模组名T12以及目标函数名T11的入口地址所在的一第一储存区域T13即分别为所取得的函数信息的函数名、定义此函数名的模组名以及函数名的入口地址所在的储存区域。
在步骤S20的一实施例中,电子装置200依据一既定方式来择取出作为目标函数信息T1的一函数信息。其中,所述既定方式可为依序、随机或其他合适的择取方式等。
在取得目标函数信息T1后,电子装置200可根据目标函数信息T1的目标模组名T12从低阶源代码文件A1-AN中找到对应的一目标源代码文件TF(步骤S30)。也就是,寻找低阶源代码文件A1-AN中与目标模组名T12具有相同档名的文件。接着,从目标源代码文件TF中获取在对应于目标函数名T11的函数定义中的一第一返回指令R1(步骤S40)。如图10所示,为目标模组名为“_rtk_gpio”的目标源代码文件TF,可以看到第一返回指令R1为“ljmpsdcc_banked_ret”。于此,仅呈现出关于目标函数名T11之函数(即,“_rtk_gpio_output”)的部分。第一返回指令R1位于目标函数名T11的函数定义的最后一行。
接着,电子装置200遍历低阶源代码文件A1-AN,以取得调用此目标函数名T11的调用模组名以及调用函数名对应的第二返回指令R2(步骤S50),并且从映射文件M1取得对应调用模组名所在的一第二储存区域(步骤S60)。调用函数名为调用此目标函数名T11的某一函数。而调用模组名是此调用函数名所在的低阶源代码文件A1-AN的档名(模组名)。举例而言,电子装置200可在如图12所示的一低阶源代码文件中找到调用模组名为“flow_system”,调用函数名为“_high_voltage_power_enable”且找到对应的第二返回指令R2(于此,如图12所示,第二返回指令R2为“lcall__sdcc_banked_call”)。并且电子装置200可在如图7所示的映射文件M1中找到对应的第二储存区域为储存区Bank1(因相应的代码为“0001”)。第二返回指令R2位于调用函数名的调用内容的最后一行。
之后,电子装置200便可根据第一储存区域T13、第一返回指令R1、每一第二储存区域以及每一第二返回指令判断各调用函数名对目标函数名T11的调用是否符合一分页切换编写格式(步骤S70)。
在步骤S70的一些实施例中,如图4所示,电子装置200可判断第一储存区域T13是否为共用区COM(步骤S71)。当判定第一储存区域T13为共用区COM时,表示目标函数名T11所对应的C语言函数定义在分页P1-P32中的某一个的共用区COM中。以图6所示为例,关键字“CSEG”表示为共用区COM。此处所列的函数均定义在共用区COM。例如,如果目标函数名T11为“_timer0_isr”,则第一储存区域T13为共用区COM。由于共用区COM的特性,无论调用此目标函数名T11的各调用函数名所对应的函数是定义在共用区COM或储存区Bank1-Bank32,电子装置200都会判定各调用函数名对目标函数名T11的调用符合分页切换编写格式(步骤S80)。
当电子装置200在步骤S71的判定结果是第一储存区域T13不为共用区COM时,电子装置200进一步判断第一储存区域T13与各第二储存区域是否均相同(步骤S73)。也就是,判断第一储存区域T13与各第二储存区域是否为储存区Bank1-Bank32中的同一个。当判定第一储存区域T13与各第二储存区域均相同时,表示无跨页调用函数的情况发生,因此电子装置200会判定各调用函数名对目标函数名T11的调用符合分页切换编写格式(步骤S80)。
如图4所示,当电子装置200在步骤S73中判定任一第二储存区域不同于第一储存区域T13(即,位于不同的分页P1-P32中)时,表示有跨页调用函数的情况发生。举例而言,假设第一储存区域T13为储存区Bank1,而一第二储存区域例如为储存区Bank3或共用区COM时,电子装置200会认为有跨页调用函数的情况发生。此时,电子装置200会判断第一返回指令R1是否为一分页返还指令,并且判断对应的第二返回指令R2(即,所对应之第二储存区域与第一储存区域T13不同的调用模组名的第二返回指令R2)是否为一分页呼叫指令(步骤S74)。在步骤S74的一些实施例中,电子装置200可仅针对在步骤S73中判定不同于第一储存区域T13的每一第二储存区域所对应的第二返回指令R2来判断是否为分页呼叫指令。换句话说,可不对已判断和第一储存区域T13相同的每一第二储存区域所对应的第二返回指令R2进行判断。
在一些实施例中,分页返还指令可为用于返回当前函数的“ljmp__sdcc_banked_ret”,且分页呼叫指令可为用于调用位于其他分页的“lcall__sdcc_banked_call”。
当电子装置200在步骤S74中判定第一返回指令R1为分页返还指令且对应的第二返回指令R2为分页呼叫指令时,表示目标函数名T11所对应的C语言函数在定义时有添加了调用关键字K1(例如,“__banked”,如图9所示),且在此调用函数名所对应的C语言函数在声明调用目标函数名T11所对应的C语言函数时也添加了调用关键字K1(例如,“__banked”,如图11所示)。因此,电子装置200会判定此调用函数名对目标函数名T11的调用符合分页切换编写格式。在步骤S74的一些实施例中,如果还存在其他第二储存区域对应的第二返回指令R2需要判断是否为分页呼叫指令,电子装置200会继续判断各第二返回指令R2是否为分页呼叫指令。并且,电子装置200可在判定第一返回指令R1为分页返还指令且判定所有第二储存区域所对应的第二返回指令R2皆为分页呼叫指令时,判定各调用函数名对目标函数名T11的调用符合分页切换编写格式(步骤S80)。
当电子装置200在步骤S74中判定第一返回指令R1不为分页返还指令(例如为一般返还指令R3,如图13所示,“ret”为一般返还指令R3)或判定对应的第二返回指令R2不为分页呼叫指令(例如为一般呼叫指令R4,如图14所示,“lcall_rtk_gpio_output”为一般呼叫指令)时,表示目标函数名T11所对应的C语言函数在定义时未添加调用关键字K1(例如,“__banked”)(即,第一返回指令R1不为分页返还指令时),或者在此调用函数名所对应的C语言函数在声明调用此目标函数名T11所对应的C语言函数时未添加调用关键字K1(例如,“__banked”)(即,第二返回指令R2不为分页呼叫指令时)。因此,电子装置200会判定此调用函数名对目标函数名T11的调用不符合分页切换编写格式(步骤S90)。如图3所示,在判定不符合分页切换编写格式后,电子装置200会产生一校验失败结果(步骤S100)。
在源代码校验方法的一实施例中,电子装置200还可根据校验失败结果致使编译器210停止其编译程序(步骤S110),并且显示出校验失败结果(步骤S120)。其中,校验失败结果可包括导致产生此校验失败结果的目标函数名T11与目标模组名T12(如果在步骤S74中有判定第一返回指令R1不为分页返还指令),及/或调用模组名与调用函数名(如果在步骤S74中有判定第二返回指令R2不为分页呼叫指令)。如此一来,程序设计者便可根据校验失败结果来快速得知需对高阶源代码文件C1中的何处进行修正。
在一些实施例中,校验失败结果可通过电子装置200其自身的显示器来进行显示。而在另一些实施例中,校验失败结果也可通过以有线连接或无线连接于电子装置200的显示装置的方式来进行显示。
在源代码校验方法之的一实施例中,电子装置200在执行步骤S80而判定各调用函数名对此目标函数名的调用符合分页切换编写格式后,电子装置200可返回步骤S20,以重新取得另一函数信息作为当前检查目标的目标函数信息T1,并接着执行后续步骤。在一些实施例中,如果函数列表中的所有函数信息电子装置200都已通过本发明一实施例的源代码校验方法的校验,则电子装置200可结束对至少一高阶源代码文件C1的整个校验程序。
综上所述,本发明实施例的源代码校验方法及非暂态计算机可读存储介质装置,其通过从映射文件中取得的第一储存区域、从目标源代码文件中取得的第一返回指令、自从映射文件中取得的每一第二储存区域以及从低阶源代码文件中取得的每一第二返回指令来判断各调用函数名对目标函数名的调用是否符合分页切换编写格式。如此一来,本发明可有效地确认出在高阶源代码文件中是否错漏了调用位于另一储存区的函数时所需添加的调用关键字,以避免后续在将低阶源代码文件组译为机械码并交由处理器来执行后,处理器会因高阶源代码文件中所错漏的调用关键字而发生卡死或其他重大问题,进而可提高源代码的开发效率以及执行此源代码的应用产品的品质。此外,本发明实施例的源代码校验方法及非暂态计算机可读存储介质装置,其可在判定不符合分页切换编写格式时,产生并显示出校验失败结果,以便程序设计者可据此快速修正源代码。
虽然本发明的技术内容已经以优选实施例揭露如上,然而这并非用于限定本发明,任何本领域中具有普通知识的技术人员,在不脱离本发明精神的情况下所做出的些许更动与润饰,均应属于本发明的保护范围内,因此本发明的保护范围应当根据本发明权利要求书所界定的为准。
Claims (10)
1.一种源代码校验方法,包括:
利用一编译器根据至少一高阶源代码文件产生一映射文件及至少一低阶源代码文件;
从所述映射文件取得一目标函数信息,其中所述目标函数信息包括一目标函数名、定义所述目标函数名的一目标模组名与所述目标函数名的一入口地址所在的一第一储存区域;
根据所述目标模组名从所述至少一低阶源代码文件中找到对应的一目标源代码文件;
从所述目标源代码文件中获取对应所述目标函数名的一第一返回指令;
遍历所述至少一低阶源代码文件以取得调用所述目标函数名的至少一调用模组名与至少一调用函数名的一第二返回指令;
从所述映射文件取得对应所述至少一调用模组名所在的一第二储存区域;
根据所述第一储存区域、所述第一返回指令、每一所述第二储存区域及每一所述第二返回指令判断各所述调用函数名对所述目标函数名的调用是否符合一分页切换编写格式;以及
当判定不符合所述分页切换编写格式时,产生一校验失败结果。
2.根据权利要求1所述的源代码校验方法,其特征在于,从所述映射文件取得所述目标函数信息的步骤包括:
根据所述映射文件产生一函数列表,其中所述函数列表包括多个函数信息;以及
从所述函数列表中取得所述多个函数信息中的一个作为所述目标函数信息。
3.根据权利要求1所述的源代码校验方法,其特征在于,判断各所述调用函数名对所述目标函数名的调用是否符合所述分页切换编写格式的步骤包括:
判断所述第一储存区域是否为一共用区;以及
当判定所述第一储存区域为所述共用区时,判定符合所述分页切换编写格式。
4.根据权利要求3所述的源代码校验方法,其特征在于,判断各所述调用函数名对所述目标函数名的调用是否符合所述分页切换编写格式的步骤还包括:
当判定所述第一储存区域不为所述共用区时,判断所述第一储存区域与各所述第二储存区域是否均相同;以及
当判定所述第一储存区域与各所述第二储存区域均相同时,判定符合所述分页切换编写格式。
5.根据权利要求4所述的源代码校验方法,其特征在于,判断各所述调用函数名对所述目标函数名的调用是否符合所述分页切换编写格式的步骤还包括:
当判定任一所述第二储存区域不同于所述第一储存区域时,判断所述第一返回指令是否为一分页返还指令以及对应的该所述第二返回指令是否为一分页呼叫指令;以及
当判定所述第一返回指令为所述分页返还指令以及对应的所述第二返回指令为所述分页呼叫指令时,判定符合所述分页切换编写格式。
6.根据权利要求5所述的源代码校验方法,其特征在于,还包括:
当判定所述第一返回指令不为所述分页返还指令或对应的所述第二返回指令不为所述分页呼叫指令时,判定不符合所述分页切换编写格式。
7.根据权利要求1所述的源代码校验方法,其特征在于,还包括:
根据所述校验失败结果致使所述编译器停止编译;以及
显示所述校验失败结果,其中所述校验失败结果包括:导致产生所述校验失败结果的所述目标函数名与所述目标模组名,及/或所述调用函数名与所述调用模组名。
8.一种非暂态计算机可读存储介质装置,储存至少一程序,当一电子装置载入并执行该所述至少一程序时,所述至少一程序致使所述电子装置执行以下步骤:
利用一编译器根据至少一高阶源代码文件产生一映射文件及至少一低阶源代码文件;
从所述映射文件取得一目标函数信息,其中所述目标函数信息包括一目标函数名、定义所述目标函数名的一目标模组名与所述目标函数名的一入口地址所在的一第一储存区域;
根据所述目标模组名从所述至少一低阶源代码文件中找到对应的一目标源代码文件;
从所述目标源代码文件中获取对应所述目标函数名的一第一返回指令;
遍历所述至少一低阶源代码文件以取得调用所述目标函数名的至少一调用模组名与至少一调用函数名的一第二返回指令;
从所述映射文件取得对应所述至少一调用模组名所在的一第二储存区域;
根据所述第一储存区域、所述第一返回指令、每一所述第二储存区域及每一所述第二返回指令判断各所述调用函数名对所述目标函数名的调用是否符合一分页切换编写格式;以及
当判定不符合所述分页切换编写格式时,产生一校验失败结果。
9.根据权利要求8所述的非暂态计算机可读存储介质装置,其特征在于,从所述映射文件取得所述目标函数信息的步骤包括:
根据所述映射文件产生一函数列表,其中所述函数列表包括多个函数信息;以及
从所述函数列表中取得所述多个函数信息中的一个作为所述目标函数信息。
10.根据权利要求8所述的非暂态计算机可读存储介质装置,其特征在于,判断各所述调用函数名对所述目标函数名的调用是否符合所述分页切换编写格式的步骤包括:
判断所述第一储存区域是否为一共用区;以及
当判定所述第一储存区域为所述共用区时,判定符合所述分页切换编写格式。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210288737.2A CN116820419A (zh) | 2022-03-22 | 2022-03-22 | 源代码校验方法及非暂态计算机可读存储介质装置 |
TW111115904A TWI813269B (zh) | 2022-03-22 | 2022-04-26 | 程式碼校驗方法及非暫態電腦可讀記錄媒體裝置 |
US17/885,047 US11977867B2 (en) | 2022-03-22 | 2022-08-10 | Code checking method and non-transitory computer-readable recording medium device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210288737.2A CN116820419A (zh) | 2022-03-22 | 2022-03-22 | 源代码校验方法及非暂态计算机可读存储介质装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116820419A true CN116820419A (zh) | 2023-09-29 |
Family
ID=88095839
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210288737.2A Pending CN116820419A (zh) | 2022-03-22 | 2022-03-22 | 源代码校验方法及非暂态计算机可读存储介质装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11977867B2 (zh) |
CN (1) | CN116820419A (zh) |
TW (1) | TWI813269B (zh) |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06230977A (ja) * | 1993-02-05 | 1994-08-19 | Nec Corp | 言語処理装置 |
JP3566602B2 (ja) * | 1999-11-04 | 2004-09-15 | Necマイクロシステム株式会社 | コンパイル方法、および、コンパイル用プログラムを記録した記録媒体 |
US7949995B2 (en) * | 2005-09-14 | 2011-05-24 | Sadlek James M | Visual programming method |
CN102830975B (zh) * | 2012-08-15 | 2015-11-18 | 深圳市翌日科技有限公司 | 一种汇编语言到高级语言的代码转换方法和装置 |
US9536093B2 (en) * | 2014-10-02 | 2017-01-03 | Microsoft Technology Licensing, Llc | Automated verification of a software system |
US10248545B2 (en) * | 2016-02-17 | 2019-04-02 | Parasoft Corporation | Method for tracking high-level source attribution of generated assembly language code |
EP3438817A1 (de) * | 2017-07-31 | 2019-02-06 | dSPACE digital signal processing and control engineering GmbH | Verfahren zur erzeugung von quellcode |
US11029927B2 (en) * | 2019-03-30 | 2021-06-08 | Intel Corporation | Methods and apparatus to detect and annotate backedges in a dataflow graph |
CN114020278A (zh) * | 2020-07-19 | 2022-02-08 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及存储介质 |
CN113282301B (zh) * | 2021-07-22 | 2021-11-02 | 北京麟卓信息科技有限公司 | 基于高级语言与汇编语言相关性的汇编指令转换方法 |
CN113656042B (zh) * | 2021-08-24 | 2023-07-21 | 北京奇艺世纪科技有限公司 | 一种代码生成方法、装置、电子设备及存储介质 |
-
2022
- 2022-03-22 CN CN202210288737.2A patent/CN116820419A/zh active Pending
- 2022-04-26 TW TW111115904A patent/TWI813269B/zh active
- 2022-08-10 US US17/885,047 patent/US11977867B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
TW202338597A (zh) | 2023-10-01 |
US20230305821A1 (en) | 2023-09-28 |
TWI813269B (zh) | 2023-08-21 |
US11977867B2 (en) | 2024-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8001368B2 (en) | Hot-pluggable information processing device and setting method | |
US8453015B2 (en) | Memory allocation for crash dump | |
US8458681B1 (en) | Method and system for optimizing the object code of a program | |
US8429632B1 (en) | Method and system for debugging merged functions within a program | |
US20150261511A1 (en) | Handling Pointers in Program Code in a System that Supports Multiple Address Spaces | |
US20190087208A1 (en) | Method and apparatus for loading elf file of linux system in windows system | |
US20110154303A1 (en) | Endian Conversion Tool | |
US6564373B1 (en) | Instruction execution mechanism | |
US20020174418A1 (en) | Constant return optimization transforming indirect calls to data fetches | |
CN103530420A (zh) | 数据文件的动态更新方法及装置 | |
US20080098179A1 (en) | Process for handling shared references to private data | |
CN111797390B (zh) | 程序运行方法、装置、电子设备及计算机可读存储介质 | |
CN109408265B (zh) | 一种ios运行异常的保护方法、装置、终端设备及存储介质 | |
CN111666102A (zh) | 文件格式转换方法、芯片验证方法、相关装置及网络芯片 | |
CN116820419A (zh) | 源代码校验方法及非暂态计算机可读存储介质装置 | |
US20130097357A1 (en) | Method for identifying memory of virtual machine and computer system thereof | |
CN107977282B (zh) | 一种SPI-Nand读取数据页的方法及装置 | |
KR100727627B1 (ko) | 동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는방법 및 이를 이용한 시스템 | |
CN113051004A (zh) | 一种依赖函数的处理方法、装置、设备及存储介质 | |
CN117170753B (zh) | 程序处理方法、程序处理装置、车辆和存储介质 | |
CN117573419B (zh) | 一种页面异常处理方法及装置 | |
CN114564250B (zh) | 一种读取配置方法及装置 | |
CN112527660B (zh) | 代码的静态检测方法和装置 | |
JP3183398B2 (ja) | 資源構成情報管理方式 | |
CN106502755B (zh) | 一种检查Linux内核模块未知符号的方法及装置 |
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 |