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

文档序号:9910802阅读:419来源:国知局
函数的调用方法、装置及终端的制作方法
【技术领域】
[0001] 本公开涉及网络通信技术领域,尤其涉及一种函数的调用方法、装置及终端。
【背景技术】
[0002] 相关技术中,用户在使用某些平台的C/C++动态数据库的时候,能够获知公有函数 的实现方式,但是用户没有权限获知私有函数的实现方式,也就不能够使用数据库中的私 有函数,这就给用户带来了不便。

【发明内容】

[0003] 为克服相关技术中存在的问题,本公开提供了一种函数的调用方法及装置。
[0004] 根据本公开实施例的第一方面,提供一种函数的调用方法,包括:
[0005] 对动态库进行反汇编,得到汇编代码;
[0006] 从所述汇编代码中获取公有函数的第一偏移地址及待调用的私有函数的第二偏 移地址;
[0007] 基于所述公有函数的第一地址、所述第一偏移地址和所述第二偏移地址确定所述 私有函数的第二地址;
[0008] 基于所述第二地址对所述私有函数进行调用。
[0009] 可选的,所述基于所述公有函数的第一地址、所述第一偏移地址和所述第二偏移 地址确定所述私有函数的第二地址之前,所述方法还包括:
[0010] 运行所述动态库,得到所述公有函数的第一地址。
[0011] 可选的,所述从所述汇编代码中获取公有函数的第一偏移地址及待调用的私有函 数的第二偏移地址,包括:
[0012] 基于所述公有函数和所述待调用的私有函数的名称,分别从所述汇编代码中查找 所述公有函数的第一偏移地址,以及所述私有函数的第二偏移地址。
[0013] 可选的,所述基于所述公有函数的第一地址、所述第一偏移地址和所述第二偏移 地址确定所述私有函数的第二地址,包括:
[0014] 基于所述公有函数的第一地址及所述公有函数的第一偏移地址,确定所述动态库 的库函数的起始地址;
[0015] 基于所述库函数的起始地址和所述私有函数的第二偏移地址,确定所述私有函数 的第二地址。
[0016] 根据本公开实施例的第二方面,提供一种函数的调用装置,包括:
[0017]反汇编模块,被配置为对动态库进行反汇编,得到汇编代码;
[0018] 获取模块,被配置为从所述汇编代码中获取公有函数的第一偏移地址及待调用的 私有函数的第二偏移地址;
[0019] 确定模块,被配置为基于所述公有函数的第一地址、所述第一偏移地址和所述第 二偏移地址确定所述私有函数的第二地址;
[0020] 调用模块,被配置为基于所述第二地址对所述私有函数进行调用。
[0021] 可选的,所述装置还包括:
[0022] 运行模块,被配置为运行所述动态库,得到所述公有函数的第一地址。
[0023]可选的,所述获取模块包括:
[0024]查找子模块,被配置为基于所述公有函数和所述待调用的私有函数的名称,分别 从所述汇编代码中查找所述公有函数的第一偏移地址,以及所述私有函数的第二偏移地 址。
[0025]可选的,所述确定模块包括:
[0026] 第一确定子模块,被配置为基于所述公有函数的第一地址及所述公有函数的第一 偏移地址,确定所述动态库的库函数的起始地址;
[0027] 第二确定子模块,被配置为基于所述库函数的起始地址和所述私有函数的第二偏 移地址,确定所述私有函数的第二地址。
[0028]根据本公开实施例的第三方面,提供一种终端,包括:处理器;用于存储处理器可 执行指令的存储器;其中,所述处理器被配置为:
[0029] 对动态库进行反汇编,得到汇编代码;
[0030] 从所述汇编代码中获取公有函数的第一偏移地址及待调用的私有函数的第二偏 移地址;
[0031 ]基于所述公有函数的第一地址、所述第一偏移地址和所述第二偏移地址确定所述 私有函数的第二地址;
[0032] 基于所述第二地址对所述私有函数进行调用。
[0033] 本公开的实施例提供的技术方案可以包括以下有益效果:
[0034] 本公开中终端通过对动态库进行反汇编,从得到的汇编代码中获取公有函数及私 有函数的偏移地址,再根据公有函数的第一地址就能够计算出私有函数的第二地址,从而 基于第二地址能够实现对私有函数的调用,使得终端的程序更具有健壮性。
[0035] 本公开中终端可以通过运行动态库得到公有函数的第一地址。
[0036] 本公开中终端可以基于公有函数的名称及私有函数的名称去汇编代码中查找公 有函数的第一偏移地址及私有函数的第二偏移地址,以便计算私有函数的第二地址。
[0037] 本公开中终端可以通过公有函数的第一地址和第一偏移地址计算库函数的起始 地址,再基于库函数的起始地址和私有函数的第二地址计算私有函数的第二地址,从而实 现对私有函数的调用,该方法易于实现,且提高了终端运行程序的健壮性。
[0038] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不 能限制本公开。
【附图说明】
[0039]此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施 例,并与说明书一起用于解释本公开的原理。
[0040] 图1是本公开根据一示例性实施例示出的一种函数的调用方法流程图。
[0041] 图2是本公开根据一示例性实施例示出的另一种函数的调用方法流程图。
[0042] 图3是本公开根据一示例性实施例示出的一种函数的调用方法的应用场景示意 图。
[0043]图4是本公开根据一示例性实施例示出的一种函数的调用装置框图。
[0044]图5是本公开根据一示例性实施例示出的另一种函数的调用装置框图。
[0045] 图6是本公开根据一示例性实施例示出的另一种函数的调用装置框图。
[0046] 图7是本公开根据一示例性实施例示出的另一种函数的调用装置框图。
[0047] 图8是本公开根据一示例性实施例示出的一种用于函数的调用装置的一结构示意 图。
【具体实施方式】
[0048] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及 附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例 中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附 权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
[0049] 在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。 在本公开和所附权利要求书中所使用的单数形式的"一种"、"所述"和"该"也旨在包括多数 形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语"和/或"是指并包 含一个或多个相关联的列出项目的任何或所有可能组合。
[0050] 应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这 些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离 本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第 一信息。取决于语境,如在此所使用的词语"如果"可以被解释成为"在……时"或"当…… 时"或"响应于确定"。
[0051] 如图1所示,图1是根据一示例性实施例示出的一种函数的调用方法流程图,该方 法可以用于终端中,包括以下步骤:
[0052] 步骤101、对动态库进行反汇编,得到汇编代码。
[0053] 本公开中的终端可以是任何具有上网功能的智能终端,例如,可以具体为手机、平 板电脑、PDA(Personal Digital Assistant,个人数字助理)等。其中,终端可以通过无线局 域网接入路由器,并通过路由器访问公网上的服务器。
[0054]本公开实施例中的动态库即用户使用的平台的c/c++动态库,例如google的动态 数据库,其中包含有用户能够直接使用的公有函数和用户想要使用但无法使用的私有函 数。
[0055] 其中,汇编代码中带有public(公有)的类成员为公有函数,能够被该类的所有成 员所访问,也就是说能够利用对象来直接调用;带有private(私有)的类成员为私有函数, 不能被对象直接访问。
[0056] 本公开实施例中采用的反汇编方法可以为相关技术中常用的反汇编技术,例如 IDA(Interactive Disassembler,交互式反汇编)等。
[0057]步骤102、从汇编代码中获取公有函数的第一偏移地址及待调用的私有函数的第 二偏移地址。
[0058]在反汇编得到的汇编代码中,基于公有函数的名称能够得到公有函数的偏移地 址,这里称之为第一偏移地址,基于私有函数的名称能够得到私有函数的偏移地址,这里称 之为第二偏移地址。
[0059] 步骤103、基于公有函数的第一地址、第一偏移地址和第二偏移地址确定私有函数 的第二地址。
[0060] 其中第一地址可以理解为公有函数能够被调用的真正地址,第二地址可以理解为 私有函数能够被调用的真正地址。
[0061] 步骤104、基于第二地址对私
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1