函数的调用方法、装置及终端的制作方法_2

文档序号:9910802阅读:来源:国知局
有函数进行调用。
[0062] 上述实施例中,终端通过对动态库进行反汇编,从得到的汇编代码中获取公有函 数及私有函数的偏移地址,再根据公有函数的第一地址就能够计算出私有函数的第二地 址,从而基于第二地址能够实现对私有函数的调用,使得终端的程序更具有健壮性。
[0063] 如图2所示,图2是根据一示例性实施例示出的另一种函数的调用方法流程图,该 方法可以用于终端中,并建立在图1所示实施例的基础上,该方法可以包括以下步骤:
[0064] 步骤201、对动态库进行反汇编,得到汇编代码。
[0065]本公开实施例中该动态库为so格式的文件,终端可以对所使用的第三方平台的动 态库进行反汇编和解析。
[0066]步骤202、运行动态库,得到公有函数的第一地址。
[0067] 本公开实施例中,在运行动态库的程序的过程中,通过公有函数的名称能够查找 得到公有函数的第一地址。
[0068] 步骤203、基于公有函数和待调用的私有函数的名称,分别从汇编代码中获取公有 函数的第一偏移地址及待调用的私有函数的第二偏移地址。
[0069] 其中,公有函数中包含有私有函数。
[0070] 步骤204、基于公有函数的第一地址及公有函数的第一偏移地址,确定动态库的库 函数的起始地址。
[0071] 本公开实施例中,公有函数的第一地址为动态库的库函数的起始地址加公有函数 自身的第一偏移地址,通过该关系,能够确定库函数的起始地址。
[0072]步骤205、基于库函数的起始地址和私有函数的第二偏移地址,得到所述私有函数 的第二地址。
[0073]本公开实施例中,私有函数的第二地址为库函数的起始地址加私有函数自身的第 二偏移地址,通过该关系,能够确定私有函数的第二地址。
[0074] 步骤206、基于第二地址调用私有函数。
[0075] 上述实施例中,终端可以通过公有函数的第一地址和第一偏移地址计算库函数的 起始地址,再基于库函数的起始地址和私有函数的第二地址计算私有函数的第二地址,从 而实现对私有函数的调用,该方法易于实现。
[0076] 如图3所示,图3是本公开根据一示例性实施例示出的一种函数的调用方法的应用 场景示意图。在图3所示的场景中,包括:作为终端的智能手机。
[0077] 用户希望通过智能手机使用某平台的私有函数,首先,智能手机获取该平台的动 态库,对动态库的so文件进行反汇编,得到汇编代码,该汇编代码可以如下所示:
[0078]
[0080] 从上述汇编代码中,智能手机根据公有函数的名称dvmHeapSource能够查找到公 有函数的第一偏移地址,第一偏移地址为75cle;还可以通过私有函数的名称trimHeaps从 上述汇编代码中查找到该私有函数的第二偏移地址,为75570。然后通过运行该动态库的程 序,如下所示:
[0081]
[0082] 智能手机能够得到公有函数dvmHeapSource的第一地址tem_ptr,通过第一地址与 第一偏移地址,能够计算得到动态库的库函数的起始地址,即tem_ptr+= 14,基于该起始地 址和第二偏移地址,能够计算出私有函数trimHeaps的第二地址trimHeaps_f_ptr,计算过 程即trimHeaps_f_ptr = (V0ID_FUNC_CALL) ((unsigned long)tem_ptr+2*offset+4+l)。智 能手机调用该第二地址就能够使用私有函数trimHeaps。
[0083] 在图3所示应用场景中,实现函数的调用的具体过程可以参见前述对图1-2中的描 述,在此不再赘述。
[0084] 与前述函数的调用方法实施例相对应,本公开还提供了函数的调用装置及其所应 用的终端的实施例。
[0085] 如图4所示,图4是本公开根据一示例性实施例示出的一种函数的调用装置框图, 该装置可以应用于终端中,并用于执行图1所示的方法,该装置可以包括:反汇编模块410、 获取模块420、确定模块430和调用模块440。
[0086] 反汇编模块410,被配置为对动态库进行反汇编,得到汇编代码;
[0087]获取模块420,被配置为从反汇编模块410得到的汇编代码中获取公有函数的第一 偏移地址及待调用的私有函数的第二偏移地址;
[0088]确定模块430,被配置为基于公有函数的第一地址、获取模块420获取的第一偏移 地址和第二偏移地址确定私有函数的第二地址;
[0089] 调用模块440,被配置为基于确定模块430确定的第二地址对私有函数进行调用。
[0090] 上述实施例中,终端通过对动态库进行反汇编,从得到的汇编代码中获取公有函 数及私有函数的偏移地址,再根据公有函数的第一地址就能够计算出私有函数的第二地 址,从而基于第二地址能够实现对私有函数的调用,使得终端的程序更具有健壮性。
[0091] 如图5所示,图5是本公开根据一示例性实施例示出的另一种函数的调用装置框 图,该实施例在前述图4所示实施例的基础上,该装置还可以包括:运行模块450。
[0092]运行模块450,被配置为运行动态库,得到公有函数的第一地址。
[0093]上述实施例中,终端可以通过运行动态库得到公有函数的第一地址。
[0094]如图6所示,图6是本公开根据一示例性实施例示出的另一种函数的调用装置框 图,该实施例在前述图5所示实施例的基础上,获取模块420可以包括:查找子模块421。
[0095] 查找子模块421,被配置为基于公有函数和待调用的私有函数的名称,分别从反汇 编模块410得到的汇编代码中查找公有函数的第一偏移地址,以及私有函数的第二偏移地 址。
[0096] 上述实施例中,终端可以基于公有函数的名称及私有函数的名称去汇编代码中查 找公有函数的第一偏移地址及私有函数的第二偏移地址,以便计算私有函数的第二地址。
[0097] 如图7所示,图7是本公开根据一示例性实施例示出的另一种函数的调用装置框 图,该实施例在前述图6所示实施例的基础上,确定模块430可以包括:第一确定子模块431 和第二确定子模块432。
[0098]第一确定子模块431,被配置为基于公有函数的第一地址及公有函数的第一偏移 地址,确定动态库的库函数的起始地址;
[0099]第二确定子模块432,被配置为基于第一确定子模块431确定的库函数的起始地址 和所述私有函数的第二偏移地址,确定所述私有函数的第二地址。
[0100] 上述实施例中,终端可以通过公有函数的第一地址和第一偏移地址计算库函数的 起始地址,再基于库函数的起始地址和私有函数的第二地址计算私有函数的第二地址,从 而实现对私有函数的调用,该方法易于实现,且提高了终端运行程序的健壮性。
[0101] 上述图4至图7示出的函数的调用装置实施例可以应用在终端中。
[0102] 上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的 实现过程,在此不再赘述。
[0103] 对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实 施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件 说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以 不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的 需要选择其中的部分或者全部模块来实现本公开方案的目的。本领域普通技术人员在不付 出创造性劳动的情况下,即可以理解并实施。
[0104] 与图4相应的,本公开还提供一种终端,该终端包括有处理器;用于存储处理器可 执行指令的存储器;其中,所述处理器被配置为:
[0105] 对动态库进行反汇编,得到汇编代码;
[0106] 从所述汇编代码中获取公有函数的第一偏移地址及待调用的私有函数的第二偏 移地址;
[0107] 基于所述公有函数的第一地址、所述第一偏移地址和所述第二偏移地址确定所述 私有函数的第二地址;
[0108] 基于所述第二地址对所述私有函数进行调用。
[0109] 如图8所示,图8是本公开根据一示例性实施例示出的一种用于函数的调用装置 800(终端设备侧)的一结构示意图。例如,装置800可以是具有路由功能的移动电话,计算 机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助 理等。
[0110] 参照图8,装置800可以包括以下一个或多个组件:处理组件802,存储器804,电源 组件806,多媒体组件808,音频组件810,输入/输出(I/O)的接口812,传感器组件814,以及 通信组件816。
[0111] 处理组件802通常控制装置800的整体操作,诸如与显示,电话呼叫,数据通信,相 机操作和记录操作相关联的操作。处理组件802可以包括一个或多个处理器820来执行指 令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便 于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多 媒体组件808和处理组件802之间的交互。
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1