函数调用路径编解码方法、装置及系统的制作方法_6

文档序号:9471142阅读:来源:国知局
数到所述当前跳转目标函数的函数调用边; 对新构建的所述函数调用边进行编码,包括: 将当前的路径编码现场保存至编码信息的记录中,所述路径编码现场包括现场路径编码值、调用点地址和目标地址; 将所述新构建的函数调用边的当前路径编码值更新为当前函数调用图中最大路径编码值 maxID+1 ; 为所述编码信息添加对应的时间戳; 根据所述编码信息对所述程序进行插桩。2.如权利要求1所述函数调用路径编码方法,其特征在于,所述记录存储于辅助栈中。3.如权利要求1所述函数调用路径编码方法,其特征在于,所述判断当前跳转目标函数在所述函数调用图是否有对应的节点,包括: 将当前运行函数的所有函数调用指令替换为调用运行时处理函数的代码,并保存寄存器现场; 在所述运行时处理函数中,根据保存的寄存器上下文计算得到所述跳转目标函数的调用目标地址; 根据所述调用目标地址判断当前跳转目标函数在所述函数调用图是否有对应的节点。4.如权利要求2所述函数调用路径编码方法,其特征在于,还包括: 当所述函数调用图符合预设的重新编码触发条件时,将所述函数调用图按照函数调用路径编码PCCE方法进行重新编码。5.如权利要求4所述函数调用路径编码方法,其特征在于,所述重新编码触发条件,包括: 所述函数调用图中新增加的函数调用边的数量达到预定门限,或, 到达预定的重新编码时间点,且频繁执行的函数调用路径发生变化。6.如权利要求5所述函数调用路径编码方法,其特征在于,所述重新编码,包括: 计算不包含递归调用边的函数调用图中各个节点的拓扑排序; 在生成编码信息时,根据所述拓扑排序对各个节点和函数调用边进行编码,为不同的函数调用路径设置不同的路径编码值; 为所述编码信息添加对应的时间戳; 根据所述编码信息对所述程序进行插桩。7.如权利要求6所述函数调用路径编码方法,其特征在于,所述根据所述拓扑排序对各个节点和函数调用边进行编码,为不同的函数调用路径设置不同的路径编码值包括: 当所述节点对应函数的调用指令为间接调用指令时,判断到当前跳转目标函数的函数调用边是否为新增函数调用边; 对各个新增函数调用边进行编码,并为各个新增函数调用边分别设置不同的路径编码值。8.如权利要求6所述函数调用路径编码方法,其特征在于,所述插桩,包括: 当所述节点对应函数的调用指令为间接调用指令时,在插桩代码中计算当前跳转目标函数的跳转目标地址的哈希值;所述哈希值用于索引所述跳转目标函数的函数调用边的路径编码值。9.如权利要求8所述函数调用路径编码方法,其特征在于,所述判断到当前跳转目标函数的函数调用边是否为新增函数调用边,包括: 根据所述哈希值索引得到的索引结果,判断跳转目标函数的函数调用边是否为新增函数调用边。10.如权利要求9所述函数调用路径编码方法,其特征在于,所述根据所述哈希值索引得到的索引结果,判断跳转目标函数的函数调用边是否为新增函数调用边,包括: 当所述哈希值索引得到的索引结果的值为O时,确定所述跳转目标函数的函数调用边为新增函数调用边。11.如权利要求6所述函数调用路径编码方法,其特征在于,所述重新编码,还包括: 当所述节点对应函数的调用指令为递归调用指令时,在所述路径编码现场中记录递归调用的调用次数。12.如权利要求11所述函数调用路径编码方法,其特征在于,所述在路径编码现场中记录递归调用的调用次数,包括: 通过计数器记录所述调用次数。13.—种函数调用路径编码的解码方法,其特征在于,包括: 获取在如权利要求1至12中任一函数调用路径编码方法进行编码过程中的编码结果;所述编码结果包括:生成所述编码结果时刻正在执行的函数、当前路径编码值和时间戳;所述编码结果还可以包括记录; 将所述编码结果解码以获取程序的函数调用路径;所述解码包括: 根据所述时间戳索引得到解码所需的编码信息; 以当前函数为起点,根据当前路径编码值解码得到函数调用子路径; 当所述编码结果中包括记录时,根据所述记录中的各路径编码现场依次解码生成对应的函数调用子路径; 将所述函数调用子路径依次组装,构建由主函数至当前函数的完整函数调用路径。14.如权利要求13所述函数调用路径编码的解码方法,其特征在于,所述根据所述记录中的各路径编码现场依次解码生成对应的函数调用子路径,包括: 当所述记录中的现场路径编码值ID大于与所述记录对应的函数调用图中的最大编码值maxID时,修正所述函数调用子路径的路径编码值为:ID-maxID_l。15.一种函数调用路径编码装置,其特征在于,包括: 初始节点构建单元,用于将程序的主函数构建为函数调用图的初始节点; 函数调用图构建单元,用于执行所述程序过程中,在当前跳转目标函数在所述函数调用图没有对应的节点时,在所述函数调用图中为所述当前跳转目标函数设置对应的节点后,构建调用函数到所述当前跳转目标函数的函数调用边;在当前跳转目标函数在所述函数调用图有对应的节点时,构建调用函数到所述当前跳转目标函数的函数调用边; 编码单元,用于对新构建的所述函数调用边进行编码;所述编码单元,包括: 记录模块,用于将当前的路径编码现场保存至编码信息的记录中,所述路径编码现场包括现场路径编码值、调用点地址和目标地址; 路径编码值更新模块,用于将所述新构建的函数调用边的当前路径编码值更新为当前函数调用图中最大路径编码值maxID+Ι ; 第一编码信息标识模块,用于为所述编码信息添加对应的时间戳; 第一插桩模块,用于根据所述编码信息对所述程序进行插桩。16.如权利要求15所述函数调用路径编码装置,其特征在于,所述记录模块包括: 辅助栈。17.如权利要求16所述函数调用路径编码装置,其特征在于,还包括: 重新编码执行单元,用于当所述函数调用图符合预设的重新编码触发条件时,将所述函数调用图按照PCCE方法进行重新编码。18.如权利要求17所述函数调用路径编码装置,其特征在于,所述重新编码触发条件,包括: 所述函数调用图中新增加的函数调用边的数量达到预定门限,或, 到达预定的重新编码时间点,且频繁执行的函数调用路径发生变化。19.如权利要求18所述函数调用路径编码装置,其特征在于,所述重新编码执行单元,包括: 拓扑排序模块,用于计算不包含递归调用边的函数调用图中各个节点的拓扑排序; 编码模块,用于在生成编码信息时,根据所述拓扑排序对各个节点和函数调用边进行编码,为不同的函数调用路径设置不同的路径编码值; 第二编码信息标识模块,用于为所述编码信息添加对应的时间戳; 第二插桩模块,用于根据所述编码信息对所述程序进行插桩。20.如权利要求19所述函数调用路径编码装置,其特征在于,所述编码模块包括: 路径编码值生成组件,用于当所述节点对应函数的调用指令为间接调用指令时,判断到当前跳转目标函数的函数调用边是否为新增函数调用边;对各个新增函数调用边进行编码,并为各个新增函数调用边分别设置不同的路径编码值。21.如权利要求20所述函数调用路径编码装置,其特征在于,所述第一插桩模块和所述第二插桩模块,均包括: 哈希计算组件,用于当所述节点对应函数的调用指令为间接调用指令时,在插桩代码中计算当前跳转目标函数的跳转目标地址的哈希值;所述哈希值用于索引所述跳转目标函数的函数调用边的路径编码值。22.如权利要求21所述函数调用路径编码装置,其特征在于,所述路径编码值生成组件,包括: 根据所述哈希值索引得到的索引结果,判断跳转目标函数的函数调用边是否为新增函数调用边。23.如权利要求19所述函数调用路径编码装置,其特征在于,所述重新编码执行单元,还包括: 调用次数模块,用于当所述节点对应函数的调用指令为递归调用指令时,在所述路径编码现场中记录递归调用的调用次数。24.如权利要求23所述函数调用路径编码装置,其特征在于,所述调用次数模块包括: 计数器。25.—种函数调用路径编码的解码装置,其特征在于,包括: 编码结果获取单元,用于获取在如权利要求15至24中任一函数调用路径编码装置进行编码过程中的编码结果;所述编码结果包括:生成所述编码结果时刻正在执行的函数、当前路径编码值和时间戳;所述编码结果还可以包括记录; 解码单元,用于将所述编码结果解码以获取程序的函数调用路径;所述解码包括子路径解析模块和路径构建模块; 所述子路径解析模块,用于根据所述时间戳索引得到解码所需的编码信息;以当前函数为起点,根据当前路径编码值解码得到函数调用子路径;用于当所述编码结果中包括记录时,根据所述记录中的各路径编码现场依次解码生成对应的函数调用子路径; 所述路径构建模块,用于将所述函数调用子路径依次组装,构建由主函数至当前函数的完整函数调用路径。26.如权利要求25所述函数调用路径编码的解码装置,其特征在于,所述子路径解析模块,包括: 修正组件,用于当所述记录中的现场路径编码值ID大于与所述记录对应的函数调用图中的最大编码值maxID时,修正所述函数调用子路径的路径编码值为:ID-maxID_l。27.—种函数调用路径编解码系统,其特征在于,包括: 如权利要求15至24中任一所述函数调用路径编码装置,以及,如权利要求25或26中所述函数调用路径编码的解码装置。
【专利摘要】一种函数调用路径编解码方法、装置及系统,其中所述方法包括,执行程序过程中,构建调用函数到当前跳转目标函数的函数调用边;对新构建的函数调用边进行编码,包括:将当前的路径编码现场保存至编码信息的记录中,路径编码现场包括现场路径编码值、调用点地址和目标地址;将新路径编码值更新为当前最大路径编码值+1;为编码信息添加对应的时间戳并对程序进行插桩。在本发明实施例中,实时动态构建程序的函数调用图的同时,还对动态构建的函数调用图进行相应的动态编码,由于保存了到达当前函数的路径中所有的新增函数调用边的路径信息和避免新设置的编码值与原有编码值发生冲突,所以使本申请中的动态编码后的函数调用路径编码可以被正确的解码。
【IPC分类】G06F9/44
【公开号】CN105224305
【申请号】CN201410310847
【发明人】李建军, 武成岗, 王振江
【申请人】华为技术有限公司, 中国科学院计算技术研究所
【公开日】2016年1月6日
【申请日】2014年7月1日
当前第6页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1