JP2017111656A - モジュール置換システム、方法及びプログラム - Google Patents

モジュール置換システム、方法及びプログラム Download PDF

Info

Publication number
JP2017111656A
JP2017111656A JP2015246199A JP2015246199A JP2017111656A JP 2017111656 A JP2017111656 A JP 2017111656A JP 2015246199 A JP2015246199 A JP 2015246199A JP 2015246199 A JP2015246199 A JP 2015246199A JP 2017111656 A JP2017111656 A JP 2017111656A
Authority
JP
Japan
Prior art keywords
replacement
module
predetermined
native code
library
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
Application number
JP2015246199A
Other languages
English (en)
Inventor
基 金子
Motoi Kaneko
基 金子
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Priority to JP2015246199A priority Critical patent/JP2017111656A/ja
Publication of JP2017111656A publication Critical patent/JP2017111656A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】既存のアプリケーションへの変更を加えずに、特定のハードウェアに特化した適切なライブラリを利用した処理を実現すること。
【解決手段】モジュール置換システムは、所定のモジュールを参照するネイティブコードを含むアプリケーションと、所定のモジュールの処理内容が対象ハードウェア向けに実装された置換用モジュールと、所定のモジュールから置換される置換用モジュールを定義した置換定義情報と、を予め保存するストレージと、対象ハードウェア上でのアプリケーションの起動指示に基づくネイティブコードのメモリへのロード中に、ネイティブコード及び置換定義情報に基づいて置換用モジュールを特定する特定部と、特定された置換用モジュールをメモリへロードするロード部と、メモリにロードされるネイティブコードにおける所定のモジュールの参照箇所に、置換用モジュールのロード先のアドレスを書き込むアドレス置換部と、を備える。
【選択図】図1

Description

本発明は、モジュール置換システム、方法及びプログラムに関する。
スマートフォン等の携帯端末装置は、Android(登録商標)等のソフトウェアプラットフォーム(フレームワーク)上で所定のアプリケーションを動作させる。例えば、スマートフォンにインストール可能なAndroid(登録商標)上で実行可能なAndroid(登録商標)アプリケーションには、以下の2つのタイプが存在する。
1)Java(登録商標)言語のみで作成されたVirtual Machine上で動作するAndroid(登録商標)アプリケーション
2)C/C++言語で作成されたCPU(Central Processing Unit)のNativeコード(プログラム)で動作するNativeアプリケーション
これらアプリケーションは、インストールパッケージとしてAPK(Application PacKage)ファイルに圧縮された状態で構成されている。Nativeアプリケーションは、開発環境であるAndroid(登録商標) SDK(Software Development Kit)とAndroid(登録商標) NDK(Native Development Kit)を通してビルドを行うことで、APKファイルを生成することができる。APKファイルの中には、Nativeアプリケーションの本体であるNativeコードが共有ライブラリ(.so)として内部に含まれる。そして、共有ライブラリ内で、静的ライブラリ又は動的ライブラリ(共有ライブラリ)内の関数を呼び出すコードが記述されている。静的ライブラリや動的ライブラリは、Nativeコードの共有ライブラリとリンクしてAPKファイルに含まれる。Nativeコードの共有ライブラリは、APKをスマートフォンにインストールしたときにストレージ(フラッシュメモリ等)内に格納される。APKをインストールした後、アプリケーションを実行する際にNativeコードを実行可能にするために、フレームワークにおいてJava(登録商標)のSystemクラスが持つSystem.loadLibrary()メソッドによりメモリ(RAM等)にロードされる。
使用例:System.loadLibrary(“unity”); // Nativeコードである libunity.so をロード
ここで、特許文献1には、対象プロセッサにより実行可能な対象コードを目的プロセッサが実行可能な目的コードに変換する間に、目的プロセッサがネイティブコードと組み合わせてプログラムコードを実行する方法に関する技術が開示されている。
特表2008−546085号公報
Android(登録商標)アプリケーションを始めとする携帯端末装置向けのアプリケーションは、市場にある様々なスマートフォン等の携帯端末装置で動作することを前提に開発及び動作確認された上で、配布されている。ところが、携帯端末装置は機種ごとに搭載されるプロセッサ及び周辺機器並びにドライバソフトウェアの仕様が異なるため、アプリケーションの実装内容によっては、一部の機種で処理速度が遅いことや処理の最適化が不十分であることや、消費電力が過剰であるなどの問題がある。その理由は、アプリケーションに含まれるNativeコードについては、ハードウェアへの依存性が高く、機種ごとの違いが起こり易いためである。
ここで、アプリケーションに含まれるNativeコードが呼び出す関数ライブラリが静的ライブラリや、アプリケーションベンダーが作成した動的ライブラリである場合、本来であれば、アプリケーションベンダーがライブラリに関するソースコードの修正を行って再ビルドを行い、修正版のAPKファイルを配布する必要がある。しかしながら、多数の携帯端末装置の一部の機種をサポートするために、アプリケーション自体の修正を行うことは、アプリケーションベンダーの負担が大きい。その理由は、APKファイル内で静的ライブラリや動的ライブラリがNativeコードにリンクされているため、アプリケーションベンダーがライブラリを個別に修正して差し替えることができないためである。
また、アプリケーションに含まれるNativeコードが呼び出す関数ライブラリがハードウェアベンダーから提供される外部の共有ライブラリである場合、ハードウェアベンダーが機種に合わせて共有ライブラリの関数の実装を修正する必要がある。しかしながら、当該共有ライブラリを利用する他のアプリケーションの動作にも影響するため、それらの動作検証も必要となる。よって、携帯端末装置を提供するハードウェアベンダーの負担が大きい。
以上のことから複数の携帯端末装置向けアプリケーションについて一部の機種に特化した改修を行うことは困難が伴うという問題がある。
本発明は、このような問題を解決するためになされたものであり、既存のアプリケーションへの変更を加えずに、特定のハードウェアに特化した適切なライブラリを利用した処理を実現するためのモジュール置換システム、方法及びプログラムを提供することを目的とする。
本発明の第1の態様にかかるモジュール置換システムは、
所定のモジュールを参照するネイティブコードを含むアプリケーションと、
前記所定のモジュールの処理内容が対象ハードウェア向けに実装された置換用モジュールと、
前記所定のモジュールから置換される前記置換用モジュールを定義した置換定義情報と、
を予め保存するストレージと、
前記対象ハードウェア上での前記アプリケーションの起動指示に基づく前記ネイティブコードのメモリへのロード中に、前記ネイティブコード及び前記置換定義情報に基づいて前記置換用モジュールを特定する特定部と、
前記特定された置換用モジュールを前記メモリへロードするロード部と、
前記メモリにロードされる前記ネイティブコードにおける前記所定のモジュールの参照箇所に、前記置換用モジュールのロード先のアドレスを書き込むアドレス置換部と、
を備える。
本発明の第2の態様にかかるモジュール置換方法は、
対象ハードウェア上で、所定のモジュールを参照するネイティブコードを含むアプリケーションの起動指示を受け付け、
前記起動指示に基づく前記ネイティブコードのメモリへのロードを開始し、
前記ロード中に、前記所定のモジュールの処理内容が対象ハードウェア向けに実装され、前記所定のモジュールから置換される置換用モジュールを定義した置換定義情報と、前記ネイティブコードとに基づいて前記置換用モジュールを特定し、
前記特定された置換用モジュールを前記メモリへロードし、
前記メモリにロードされる前記ネイティブコードにおける前記所定のモジュールの参照箇所に、前記置換用モジュールのロード先のアドレスを書き込む。
本発明の第3の態様にかかるモジュール置換プログラムは、
対象ハードウェア上で、所定のモジュールを参照するネイティブコードを含むアプリケーションの起動指示を受け付ける処理と、
前記起動指示に基づく前記ネイティブコードのメモリへのロードを開始する処理と、
前記ロード中に、前記所定のモジュールの処理内容が対象ハードウェア向けに実装され、前記所定のモジュールから置換される置換用モジュールを定義した置換定義情報と、前記ネイティブコードとに基づいて前記置換用モジュールを特定する処理と、
前記特定された置換用モジュールを前記メモリへロードする処理と、
前記メモリにロードされる前記ネイティブコードにおける前記所定のモジュールの参照箇所に、前記置換用モジュールのロード先のアドレスを書き込む処理と、
をコンピュータに実行させる。
本発明により、既存のアプリケーションへの変更を加えずに、特定のハードウェアに特化した適切なライブラリを利用した処理を実現し、アプリケーションベンダーやハードウェアベンダへの負担を軽減するためのモジュール置換システム、方法及びプログラムを提供することができる。
本発明の実施の形態1にかかるモジュール置換システムの構成を示すブロック図である。 関連技術において、ストレージにNativeアプリケーションがインストールされた状態を示す図である。 関連技術において、対象ハードウェアにおいてNativeアプリケーションが起動されて、メモリにロードされた場合のプロセスメモリ空間の例を示す図である。 実施例1−1にかかる置換定義情報と置換用モジュール群の例を示す図である。 実施例1−1にかかるモジュール置換処理の流れを示すフローチャートである。 実施例1−1にかかるモジュール置換の例を説明するための概念図である。 実施例1−1にかかるモジュール置換の例を説明するための概念図である。 実施例1−1にかかるモジュール置換の例を説明するための概念図である。 実施例1−1にかかるモジュール置換の例を説明するための概念図である。 実施例1−1において、ストレージにNativeアプリケーションがインストールされた状態を示す図である。 実施例1−1において、対象ハードウェアにおいてNativeアプリケーションが起動されて、メモリにロードされた場合のプロセスメモリ空間の例を示す図である。 実施例1−2における静的ライブラリの呼び出しの置換処理の概念を示す図である。 実施例2−1において、ストレージにNativeアプリケーションがインストールされた状態を示す図である。 実施例2−1にかかる置換定義情報の例を示す図である。 実施例2−1において、対象ハードウェアにおいてNativeアプリケーションが起動されて、メモリにロードされた場合のプロセスメモリ空間の例を示す図である。 実施例2−2にかかる置換定義情報の例を示す図である。
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
<発明の実施の形態1>
図1は、本発明の実施の形態1にかかるモジュール置換システム100の構成を示すブロック図である。モジュール置換システム100は、ソフトウェアプラットフォーム(フレームワーク)上で所定のアプリケーション(組込み用ソフトウェア)を動作させることができるものである。例えば、モジュール置換システム100は、スマートフォン等の携帯端末装置であり、Android(登録商標)のフレームワークが稼働するものとする。または、モジュール置換システム100は、テレビ等の設置型の端末装置であり、Tizen(登録商標)のフレームワークが稼働するものであってもよい。
モジュール置換システム100は、ストレージ110と、メモリ120と、プロセッサ130と、通信部140とを備える。ストレージ110は、例えば、フラッシュメモリ等の記憶装置であり、アプリケーションがインストールされる領域を含む。ストレージ110は、Nativeアプリケーション111と、置換用モジュール112と、置換定義情報113とを予め保存する。
Nativeアプリケーション111は、所定のモジュールを参照するネイティブコードを含むアプリケーションプログラムである。尚、Nativeアプリケーション111には、非ネイティブコード、例えばJava(登録商標)コード等が含まれていても良い。所定のモジュールは、ライブラリファイルやライブラリの関数等のコードである。ネイティブコードは、所定のモジュールを介したモジュール置換システム100内の周辺機器等へのアクセス処理を含む。所定のモジュールが静的ライブラリ又はアプリケーションベンダーが作成した動的ライブラリである場合、ネイティブコードは、静的ライブラリ又は動的ライブラリとリンクされており、これらが一体となった共有ライブラリファイル(.so)として提供される。または、所定のモジュールがシステムにより提供される外部の共有ライブラリの場合、ネイティブコードは、外部の共有ライブラリへの参照を含む共有ライブラリファイルとして提供される。ネイティブコードは、例えば、Nativeアプリケーション111は、携帯端末装置の周辺機器を利用したアプリケーション、具体的には、携帯端末装置に搭載されたカメラの操作に関連するアプリケーション等が挙げられるがこれに限定されない。
置換用モジュール112は、所定のモジュールの処理内容が対象ハードウェア向けに実装されたプログラムファイルである。つまり、置換用モジュール112は、他のハードウェアにおける所定のモジュールの処理と同等の結果が得られ、対象ハードウェア向けに処理速度や消費電力等が最適化されるように、カスタマイズされて実装されたモジュールである。所定のモジュールがライブラリファイルである場合、置換用モジュール112も対応するライブラリファイルであり、所定のモジュールがライブラリの関数等である場合、置換用モジュール112も対応する関数単位のファイルとなる。
置換定義情報113は、所定のモジュールから置換される置換用モジュール112を定義した情報である。置換定義情報113は、ストレージ110内のネイティブコードが参照する所定のモジュールが対象ハードウェアにおいては置換対象であり、置換用モジュール112に置き換えることを示す情報である。置換定義情報113は、例えば、置換対象のアプリケーション識別情報、対象ハードウェアであるターゲットのリスト(例えば、ターゲット識別情報(機種、対象ハードウェアのモデル番号(型番)等)、ターゲットごとの置換対象のモジュールのリスト等を含めてよい。
メモリ120は、プロセッサ130における作業領域であり、例えば、RAM等である。そのため、プロセッサ130により実行されるアプリケーションは、起動時にストレージ110からメモリ120にロードされる。
プロセッサ130は、フレームワーク上で所定のアプリケーションを実行する制御装置である。プロセッサ130は、例えば、CPUやMPU等であるとよい。プロセッサ130は、特定部131と、ロード部132と、アドレス置換部133とを備える。特定部131は、対象ハードウェア(すなわち、モジュール置換システム100)上でのNativeアプリケーション111の起動指示に基づくネイティブコードのメモリ120へのロード中に、ネイティブコード及び置換定義情報113に基づいて置換用モジュール112を特定する。ロード部132は、特定された置換用モジュール112をメモリ120へロードする。アドレス置換部133は、メモリ120にロードされるネイティブコードにおける所定のモジュールの参照箇所に、置換用モジュール112のロード先のアドレスを書き込む。通信部140は、モジュール置換システム100の外部との無線又は有線の通信を行う。
このように、本実施の形態1により、既存のNativeアプリケーション111への変更を加えずに、特定のハードウェアに特化した適切なライブラリ(置換用モジュール112)を利用した処理を実現し、アプリケーションベンダーやハードウェアベンダーへの負担を軽減することができる。
尚、図示しないが、ストレージ110には、OS(Operating System)、フレームワーク、VM(Virtual Machine)、共有ライブラリ、本発明の実施の形態にかかるモジュール置換プログラム等も保存されている。そして、プロセッサ130がOS等やモジュール置換プログラムをメモリ120に読み込み、実行することにより、本発明の実施の形態にかかる特定部131、ロード部132及びアドレス置換部133を実現できる。
また、置換定義情報113は、所定のモジュールの識別情報と置換用モジュール112のストレージ110内のアドレス情報とを対応付けて定義しておき、特定部131は、置換定義情報113に基づいて、ネイティブコードから参照される所定のモジュールの識別情報に対応付けられた置換用モジュール112のアドレス情報を特定し、ロード部132は、ストレージ110のアドレス情報から置換用モジュール112を読み出して、メモリ120へロードすることが望ましい。これにより、対象モジュールに対応する置換モジュールを正確にロードできる。
<実施例1−1>
ここで、本実施の形態1の実施例1−1として、所定のモジュールがアプリケーションベンダーにより開発された動的ライブラリである場合について説明する。尚、実施例1−1は、所定のモジュールがシステムにより提供された外部の共有ライブラリである場合についても同様に適用できる。
まず、本実施例1−1の適用前のNativeアプリケーションのロードについて説明する。図2は、関連技術において、ストレージ110にNativeアプリケーション111aがインストールされた状態を示す図である。尚、ストレージ110内の他の保存内容については図示を省略している。ここで、Nativeアプリケーション111aには、非ネイティブコード1111aと、ネイティブコード1112aと、動的ライブラリ1113aとが含まれている。そして、ネイティブコード1112aは、動的ライブラリ1113aへの参照を含む。そのため、開発時にビルドされたAPKファイル(Nativeアプリケーション111a)内で、動的ライブラリ1113aは、ネイティブコード1112aにリンクされて一体となっていることを示す。
図3は、関連技術において、対象ハードウェアにおいてNativeアプリケーション111aが起動されて、メモリ120にロードされた場合のプロセスメモリ空間の例を示す図である。尚、メモリ120内の他のプロセス(非ネイティブコード1111a等)については図示を省略している。ここで、ネイティブコード1112aは、ELF(Executable and Linking Format)形式で生成されているものとする。すなわち、ネイティブコード1112aは、処理内容のコードであるコード部と、PLT(Procedure Linkage Table)部と、GOT(Global Offset Table)部とを少なくとも含む。GOT部には、動的ライブラリ1113a内の関数への参照箇所が含まれているものとする。但し、ネイティブコード1112aの形式は一例であり、これ以外が含まれていてもよい。
そして、Nativeアプリケーション111aが起動されると、ネイティブコード1112a及び動的ライブラリ1113aがメモリ120にロードされ、GOT部からの参照箇所には、メモリ120内の動的ライブラリ1113aの参照先の関数のアドレスが書き込まれる。
次に、本実施例1−1を適用した場合のNativeアプリケーションのロードについて説明する。まず、図4は、実施例1−1にかかる置換定義情報113aと置換用モジュール群112aの例を示す図である。置換定義情報113aは、対象アプリテーブルTA1と、対象関数テーブルTF1〜TFnとを含む。置換用モジュール群112aは、対象関数テーブルTF1〜TFnに登録された複数の関数の夫々に対応する置換対象の関数プログラムの集合を示す。
対象アプリテーブルTA1は、例えば、”App Name”、"num of target"、"Target info #1"〜"Target info #n"の属性と対応するデータを有する。”App Name”は、アプリケーション識別情報として、例えば、”AndroidManifest.xml”内のpackage=“AppName”や、対象のネイティブコードのファイル名(例えば、“libApp.so”)を用いることができる。"num of target"は、対象ターゲットの種類の数n、"Target info #1"〜"Target info #n"は、対象ターゲットの情報、例えば、対象ターゲットの型番(モデル番号)と各対象関数テーブルへのリンクアドレス等が含まれる。
対象関数テーブルTF1〜TFnのそれぞれは、“num of Func”、“Func table [0]”・・・の属性と対応するデータを有する。“num of Func”は、該当するターゲットにおける置換対象の関数モジュールの数、“Func table [0]”等は、対象関数のアドレス情報、例えば、置換対象の関数名、オフセットアドレス、コードサイズ等を含む。つまり、置換対象の関数の数は、対象ターゲットごとに異なり、同じ関数名であっても対象ターゲットごとに実装内容をカスタマイズすることができる。
図5は、実施例1−1にかかるモジュール置換処理の流れを示すフローチャートである。また、図6〜9は、実施例1−1にかかるモジュール置換の例を説明するための概念図である。そして、以下の説明においては、適宜、図6〜9を参照する。まず、モジュール置換システム100は、ユーザ等からアプリケーションの起動指示を受け付ける。例えば、モジュール置換システム100は、モジュール置換システム100の一例であるスマートフォンを所持するユーザから、当該スマートフォン上でインストール済みのNativeアプリケーション111のアイコンをタップする操作を受け付ける。これに応じて、モジュール置換システム100は、指示されたNativeアプリケーション111(“App.A”)の起動を開始する(S101、図6)。
次に、モジュール置換システム100は、Nativeアプリケーション111内のネイティブコードのロードを開始する(S102)。例えば、モジュール置換システム100は、“App.A”のプロセスを生成し、ロード部132は、ネイティブコードをメモリ120へロードし始める(図6)。ここで、モジュール置換システム100は、Nativeアプリケーション111が置換対象のアプリケーションであるか否かを判定する(S103)。例えば、モジュール置換システム100は、Nativeアプリケーション111のアプリケーション識別情報“App.A”が、対象アプリテーブルTA1に登録された”App Name”と一致するか否かを判定する。ステップS103において一致しない場合、置換処理を終了し、通常通りアプリケーションの起動処理を継続する。
ステップS103において一致する場合、モジュール置換システム100は、対象ハードウェアに対応する関数テーブルを読み出す(S104)。例えば、モジュール置換システム100は、対象アプリテーブルTA1の"Target info #1"〜"Target info #n"の対象ターゲットの情報の中から自身の型番と一致するものを特定し、対象関数テーブルTF1〜TFnの中から、特定した対象ターゲットの情報に対応する対象関数テーブルを読み出す。例えば、モジュール置換システム100は、“Target #1”の対象関数テーブルTF1を読み出す(図6)。
そして、特定部131は、読み出した関数テーブルから置換対象の関数を特定する(S105、図7)。例えば、特定部131は、対象関数テーブルTF1の“Func table [0]”・・・の関数名を特定する。そして、ロード部132は、特定した関数モジュールをメモリ120へロードする(S106)。例えば、ロード部132は、“Func table [0]”・・・の対象関数のアドレス情報に基づいて、ストレージ110に保存された置換定義情報113をメモリ120へロードする。
その後、アドレス置換部133は、ネイティブコードのGOTのアドレスにロードした関数ライブラリのアドレスを書き込む(S107、図8)。すなわち、アドレス置換部133は、メモリ120におけるネイティブコード内の所定のモジュールの参照箇所に、置換用モジュール112のロード先のアドレスを書き込む。その結果、その後、libA.soが実行され、関数コールがされた時に、PLTを経由してGOTから置換後の関数が呼び出されて、実行される(図9)。
ここで、図10は、実施例1−1において、ストレージ110にNativeアプリケーション111aがインストールされた状態を示す図である。ここではさらに、置換定義情報113a及び置換用モジュール群112aが保存されていることを示す。そして、図11は、実施例1−1において、対象ハードウェアにおいてNativeアプリケーション111aが起動されて、メモリ120にロードされた場合のプロセスメモリ空間の例を示す図である。ここでは、置換用モジュール群112aのメモリ領域も確保され、その上、ネイティブコード1112aのGOT参照先が” func@SharedA’”に書き換えられていることを示す。そのため、“App A”の実行において関数“SharedA”が呼び出される代わりに“SharedA’”が呼び出されて実行される。そのため、対象ハードウェアにおけるNativeアプリケーション111aの処理において、高速化、最適化、消費電力効率化を実現できる。そして、そのためのアプリケーションベンダー及びハードウェアベンダーの負担を軽減できる。
尚、実施例1−1は、次のように表現することもできる。すなわち、置換定義情報113は、置換対象のアプリケーションの識別情報と、複数の対象ハードウェアの識別情報とを含む第1のテーブル(対象アプリテーブル)と、対象ハードウェアごとの置換用モジュールのストレージ110内のアドレス情報を含む複数の第2のテーブル(対象関数てーブル)と、を含み、特定部131は、第1のテーブルに含まれる置換対象のアプリケーションの識別情報に基づき、起動指示されたアプリケーションが置換対象か否かを判定し、置換対象と判定された場合に、第1のテーブルに含まれる対象ハードウェアの識別情報に基づいて、複数の第2のテーブルの中から起動指示された対象ハードウェアに対応するテーブルを特定し、ロード部は、特定された第2のテーブルに含まれる置換用モジュールのアドレス情報に基づいてストレージ110からメモリ120へ当該置換用モジュールをロードする。これにより、対象ハードウェアごとに異なる置換用モジュールを置換することを容易に実現でき、対象ハードウェアごとに最適にカスタマイズしたモジュールにより処理することができる。
さらに、前記ネイティブコードは、コード部と、所定の共有ライブラリ内の関数を前記所定のモジュールとして呼び出す関数コール部とを含み、前記置換用モジュールは、前記所定の共有ライブラリ内の関数の処理内容が前記対象ハードウェア向けに実装された関数であり、前記特定部は、前記ネイティブコードの前記関数コール部から前記所定の共有ライブラリ内の関数の呼び出し箇所を特定し、前記アドレス置換部は、前記メモリにおける前記ネイティブコード内の前記特定された関数の呼び出し箇所に、前記置換用モジュールにおける関数のロード先のアドレスを書き込むことが望ましい。これにより、関数単位の置換が容易に実現でき、きめ細かく管理できる。さらに、置換を行う関数を必要最小限にすることで、省メモリ化を実現できる。
<実施例1−2>
続いて、本実施の形態1の実施例1−2として、所定のモジュールが静的ライブラリである場合について説明する。図12は、実施例1−2における静的ライブラリの呼び出しの置換処理の概念を示す図である。まず、ネイティブコード1112bは、静的ライブラリを呼び出す場合、関数コールにより直接、関数が呼び出す形式となっている。つまり、動的ライブラリのようにELF形式は用いられない。そこで、本実施例1−2では、ネイティブコード1112b内の静的ライブラリへの関数コールの箇所11121bについて、PLT部及びGOT部を介して呼び出すように修正した上で、GOT部からの関数の呼び出し箇所を置換用モジュールのアドレスに置換するものとする。
そのための処理として例えば、モジュール置換システム100は、ネイティブコード1112bのロード時に、置換定義情報113を参照して置換対象の関数コールの箇所11121bを特定する(S201)。そして、関数コールの箇所11121bをPLT経由の処理にパッチする(S202)。そして、NativeコードにPLT部及びGOT部を追加する(S203及びS204)。その後、GOT部の関数の呼び出しアドレスを、ステップS106でロードした置換用の関数モジュールのアドレスに書き換える(S205)。
このように本実施例1−2においても、所定のモジュールを置換用のモジュールに置き換えて実行させることができ、実施例1−1と同様の効果を奏することができる。さらに、本実施例1−2では、アドレス置換部の処理を動的ライブラリと同様にしているため、実施例1−1の改良により実現が可能であり、置換定義情報も同様に用いることができる。よって、動的ライブラリ及び静的ライブラリのいずれについても一部が共通する置換処理のロジックを用いることができ、モジュール置換システム100の処理も効率化できる。
尚、実施例1−2は、次のように表現することもできる。すなわち、前記所定のモジュールは、所定の静的ライブラリにおける関数であり、前記置換用モジュールは、前記所定の静的ライブラリにおける関数の処理内容が前記対象ハードウェア向けに実装された関数であり、前記特定部は、前記ネイティブコードの中から前記所定の静的ライブラリにおける関数の呼び出し箇所を特定し、前記特定された呼び出し箇所を共有ライブラリにおける関数の呼び出し形式に修正し、前記アドレス置換部は、前記メモリ内の前記修正後の呼び出し形式における関数の呼び出し箇所に、前記置換用モジュールのロード先のアドレスを書き込む。このように、共有ライブラリにおける関数の呼び出し形式に例えば、PLT部やGOT部を追加することで共有ライブラリの置換処理に追加して実現ができ、処理の共通化を図ることができる。
<発明の実施の形態2>
本発明の実施の形態2は、実施の形態1の変形例であり、ネイティブコードが複数のライブラリファイルを参照する場合を対象としたものである。
<実施例2−1>
実施例2−1では、ネイティブコードが2種類のライブラリファイルを参照し、それぞれのライブラリファイル単位で対象ハードウェア向けに置換する場合について説明する。図13は、実施例2−1において、ストレージ110にNativeアプリケーション111bがインストールされた状態を示す図である。ここで、Nativeアプリケーション111bには、非ネイティブコード1111bと、ネイティブコード1112bと、動的ライブラリ1113aとが含まれている。そして、ネイティブコード1112bは、動的ライブラリ1113a及び外部共有ライブラリ114への参照を含む。そのため、開発時にビルドされたAPKファイル(Nativeアプリケーション111b)内で、動的ライブラリ1113aは、ネイティブコード1112aにリンクされて一体となっており、一方、外部共有ライブラリ114は含まれていないことを示す。外部共有ライブラリ114は、ストレージ110に別途保存されているものとする。
また、ストレージ110には、置換定義情報113b及び置換用ライブラリファイル112b、並びに、置換定義情報113c及び置換用ライブラリファイル112cが保存されているものとする。置換定義情報113bには、動的ライブラリ1113aを置換用ライブラリファイル112bへ置換するための定義がされており、置換定義情報113cには、外部共有ライブラリ114を置換用ライブラリファイル112cへ置換するための定義がされているものとする。
図14は、実施例2−1にかかる置換定義情報113bの例を示す図である。置換定義情報113bは、対象アプリテーブルTA1aと、対象ライブラリテーブルTL1〜TLnとを含む。尚、対象ライブラリテーブルTL1〜TLnのそれぞれに登録された複数のライブラリファイルは図示を省略する。ここで、対象アプリテーブルTA1aの"Target info #1"〜"Target info #n"には、各対象ライブラリテーブルへのリンクアドレス等が含まれる。そして、対象ライブラリテーブルTL1〜TLnのそれぞれは、“Model No.”、“Lib name A”、“Link addr A1”・・・の属性と対応するデータを有する。“Model No.”は、対象ターゲットの情報、例えば、対象ターゲットの型番(モデル番号)を示す。“Lib name A”は、置換対象のライブラリファイル名であり、“Link addr A1”は、置換対象のライブラリファイルのアドレス情報である。
そのため、実施例2−1にかかるモジュール置換処理は、実施例1−1における置換対象の関数モジュールをライブラリファイルとして適用することで、実現可能である。図15は、実施例2−1において、対象ハードウェアにおいてNativeアプリケーション111bが起動されて、メモリ120にロードされた場合のプロセスメモリ空間の例を示す図である。ここでは、置換用ライブラリファイル112b及び112cのメモリ領域も確保され、その上、ネイティブコード1112bのGOT参照先が”func@SharedA’”及び”func@SharedX’”に書き換えられていることを示す。そのため、“App A”の実行においてライブラリ“libSharedA.so”及び“libSharedX.so”が呼び出される代わりにライブラリ“libSharedA’.so”及び“libSharedX’.so”が呼び出されて実行される。そのため、対象ハードウェアにおけるNativeアプリケーション111bの処理において、高速化、最適化、消費電力効率化を実現できる。そして、そのためのアプリケーションベンダー及びハードウェアベンダーの負担を軽減できる。
尚、実施例2−1は、次のように表現することもできる。すなわち、前記所定のモジュールは、複数の関数を含む所定のライブラリファイルであり、前記置換用モジュールは、前記所定のライブラリファイルに含まれる複数の関数の処理内容が前記対象ハードウェア向けに実装された複数の関数を含む置換用ライブラリファイルであり、前記置換定義情報は、前記所定のライブラリファイルから置換される前記置換用ライブラリファイルを定義している。このように、実施例2−1では、ライブラリファイル単位の差替えとなるため、置換定義情報113bの設定は容易となり、ハードウェアベンダーにとっての運用も容易であり、負担がさらに軽減できる。
<実施例2−2>
実施例2−2では、実施例2−1と同様のネイティブコードにおいて、ライブラリファイル内の関数ごとに置換する場合について説明する。図16は、実施例2−2にかかる置換定義情報113dの例を示す図である。置換定義情報113dは、対象アプリテーブルTA1aと、対象ライブラリテーブルTL1aと、対象関数テーブルTF1〜TFnとを含む。尚、対象ライブラリテーブルTL1以外の対象ライブラリテーブル、及び、対象関数テーブルTF1〜TFnのそれぞれに登録された複数の関数モジュールは、図示を省略する。対象アプリテーブルTA1aは、図14と同様である。また、対象ライブラリテーブルTL1aは、“Link addr A1”等において、対象関数テーブルTF1〜TFnへのリンクアドレスが設定されている。対象関数テーブルTF1〜TFnは、ライブラリファイル単位である点を除き、図4と同様である。
そのため、実施例2−2にかかるモジュール置換処理は、実施例1−1及び2−1を組み合わせることで、ライブラリファイルごとに、関数単位の置換が実現可能である。また、実施例2−2は、次のように表現することもできる。すなわち、前記ネイティブコードは、複数の関数を含む異なる複数のライブラリファイルを前記所定のモジュールとして参照し、前記置換用モジュールは、前記複数のライブラリファイルのそれぞれに含まれる関数のうち少なくとも一部の処理内容が前記対象ハードウェア向けに実装された関数であり、前記置換定義情報は、前記複数のライブラリファイルのそれぞれに含まれる関数のうち少なくとも一部から置換される関数を前記置換用モジュールとして定義している。これにより、ライブラリファイルごとに、関数単位の置換が容易に実現でき、きめ細かく管理できる。さらに、置換を行う関数を必要最小限にすることで、省メモリ化を実現できる。
<その他の実施の形態>
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更及び組み合わせすることが可能である。
100 モジュール置換システム
110 ストレージ
111 Nativeアプリケーション
111a Nativeアプリケーション
1111a 非ネイティブコード
1112a ネイティブコード
1112b ネイティブコード
1113a 動的ライブラリ
112 置換用モジュール
112a 置換用モジュール群
112b 置換用ライブラリファイル
112c 置換用ライブラリファイル
113 置換定義情報
113a 置換定義情報
113b 置換定義情報
113c 置換定義情報
113d 置換定義情報
114 外部共有ライブラリ
120 メモリ
130 プロセッサ
131 特定部
132 ロード部
133 アドレス置換部
140 通信部
TA1 対象アプリテーブル
TA1a 対象アプリテーブル
TF1 対象関数テーブル
TFn 対象関数テーブル
TL1 対象ライブラリテーブル
TLn 対象ライブラリテーブル
TL1a 対象ライブラリテーブル

Claims (9)

  1. 所定のモジュールを参照するネイティブコードを含むアプリケーションと、
    前記所定のモジュールの処理内容が対象ハードウェア向けに実装された置換用モジュールと、
    前記所定のモジュールから置換される前記置換用モジュールを定義した置換定義情報と、
    を予め保存するストレージと、
    前記対象ハードウェア上での前記アプリケーションの起動指示に基づく前記ネイティブコードのメモリへのロード中に、前記ネイティブコード及び前記置換定義情報に基づいて前記置換用モジュールを特定する特定部と、
    前記特定された置換用モジュールを前記メモリへロードするロード部と、
    前記メモリにロードされる前記ネイティブコードにおける前記所定のモジュールの参照箇所に、前記置換用モジュールのロード先のアドレスを書き込むアドレス置換部と、
    を備えるモジュール置換システム。
  2. 前記置換定義情報は、
    前記所定のモジュールの識別情報と前記置換用モジュールの前記ストレージ内のアドレス情報とを対応付けて定義しており、
    前記特定部は、
    前記置換定義情報に基づいて、前記ネイティブコードから参照される前記所定のモジュールの識別情報に対応付けられた前記置換用モジュールの前記アドレス情報を特定し、
    前記ロード部は、前記ストレージの前記アドレス情報から前記置換用モジュールを読み出して、前記メモリへロードする
    請求項1に記載のモジュール置換システム。
  3. 前記置換定義情報は、
    置換対象のアプリケーションの識別情報と、複数の前記対象ハードウェアの識別情報とを含む第1のテーブルと、
    前記対象ハードウェアごとの前記置換用モジュールの前記ストレージ内のアドレス情報を含む複数の第2のテーブルと、を含み、
    前記特定部は、
    前記第1のテーブルに含まれる前記置換対象のアプリケーションの識別情報に基づき、前記起動指示されたアプリケーションが置換対象か否かを判定し、
    前記置換対象と判定された場合に、前記第1のテーブルに含まれる前記対象ハードウェアの識別情報に基づいて、前記複数の第2のテーブルの中から前記起動指示された前記対象ハードウェアに対応するテーブルを特定し、
    前記ロード部は、
    前記特定された第2のテーブルに含まれる前記置換用モジュールの前記アドレス情報に基づいて前記ストレージから前記メモリへ当該置換用モジュールをロードする
    請求項1又は2に記載のモジュール置換システム。
  4. 前記ネイティブコードは、コード部と、所定の共有ライブラリ内の関数を前記所定のモジュールとして呼び出す関数コール部とを含み、
    前記置換用モジュールは、前記所定の共有ライブラリ内の関数の処理内容が前記対象ハードウェア向けに実装された関数であり、
    前記特定部は、前記ネイティブコードの前記関数コール部から前記所定の共有ライブラリ内の関数の呼び出し箇所を特定し、
    前記アドレス置換部は、前記メモリにおける前記ネイティブコード内の前記特定された関数の呼び出し箇所に、前記置換用モジュールにおける関数のロード先のアドレスを書き込む
    請求項1乃至3のいずれか1項に記載のモジュール置換システム。
  5. 前記所定のモジュールは、所定の静的ライブラリにおける関数であり、
    前記置換用モジュールは、前記所定の静的ライブラリにおける関数の処理内容が前記対象ハードウェア向けに実装された関数であり、
    前記特定部は、前記ネイティブコードの中から前記所定の静的ライブラリにおける関数の呼び出し箇所を特定し、前記特定された呼び出し箇所を共有ライブラリにおける関数の呼び出し形式に修正し、
    前記アドレス置換部は、前記メモリ内の前記修正後の呼び出し形式における関数の呼び出し箇所に、前記置換用モジュールのロード先のアドレスを書き込む、
    請求項1乃至4のいずれか1項に記載のモジュール置換システム。
  6. 前記所定のモジュールは、複数の関数を含む所定のライブラリファイルであり、
    前記置換用モジュールは、前記所定のライブラリファイルに含まれる複数の関数の処理内容が前記対象ハードウェア向けに実装された複数の関数を含む置換用ライブラリファイルであり、
    前記置換定義情報は、前記所定のライブラリファイルから置換される前記置換用ライブラリファイルを定義している、
    請求項1乃至3のいずれか1項に記載のモジュール置換システム。
  7. 前記ネイティブコードは、複数の関数を含む異なる複数のライブラリファイルを前記所定のモジュールとして参照し、
    前記置換用モジュールは、前記複数のライブラリファイルのそれぞれに含まれる関数のうち少なくとも一部の処理内容が前記対象ハードウェア向けに実装された関数であり、
    前記置換定義情報は、前記複数のライブラリファイルのそれぞれに含まれる関数のうち少なくとも一部から置換される関数を前記置換用モジュールとして定義している、
    請求項1乃至3のいずれか1項に記載のモジュール置換システム。
  8. 対象ハードウェア上で、所定のモジュールを参照するネイティブコードを含むアプリケーションの起動指示を受け付け、
    前記起動指示に基づく前記ネイティブコードのメモリへのロードを開始し、
    前記ロード中に、前記所定のモジュールの処理内容が対象ハードウェア向けに実装され、前記所定のモジュールから置換される置換用モジュールを定義した置換定義情報と、前記ネイティブコードとに基づいて前記置換用モジュールを特定し、
    前記特定された置換用モジュールを前記メモリへロードし、
    前記メモリにロードされる前記ネイティブコードにおける前記所定のモジュールの参照箇所に、前記置換用モジュールのロード先のアドレスを書き込む
    モジュール置換方法。
  9. 対象ハードウェア上で、所定のモジュールを参照するネイティブコードを含むアプリケーションの起動指示を受け付ける処理と、
    前記起動指示に基づく前記ネイティブコードのメモリへのロードを開始する処理と、
    前記ロード中に、前記所定のモジュールの処理内容が対象ハードウェア向けに実装され、前記所定のモジュールから置換される置換用モジュールを定義した置換定義情報と、前記ネイティブコードとに基づいて前記置換用モジュールを特定する処理と、
    前記特定された置換用モジュールを前記メモリへロードする処理と、
    前記メモリにロードされる前記ネイティブコードにおける前記所定のモジュールの参照箇所に、前記置換用モジュールのロード先のアドレスを書き込む処理と、
    をコンピュータに実行させるモジュール置換プログラム。
JP2015246199A 2015-12-17 2015-12-17 モジュール置換システム、方法及びプログラム Pending JP2017111656A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015246199A JP2017111656A (ja) 2015-12-17 2015-12-17 モジュール置換システム、方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015246199A JP2017111656A (ja) 2015-12-17 2015-12-17 モジュール置換システム、方法及びプログラム

Publications (1)

Publication Number Publication Date
JP2017111656A true JP2017111656A (ja) 2017-06-22

Family

ID=59081609

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015246199A Pending JP2017111656A (ja) 2015-12-17 2015-12-17 モジュール置換システム、方法及びプログラム

Country Status (1)

Country Link
JP (1) JP2017111656A (ja)

Similar Documents

Publication Publication Date Title
US8555280B2 (en) Terminal device of non-android platform for executing android applications, and computer readable recording medium for storing program of executing android applications on non-android platform
US9891939B2 (en) Application compatibility with library operating systems
WO2017185606A1 (zh) 基于overlay机制的APK开发方法及系统
US8484631B2 (en) Supporting hardware configuration changes in a UEFI firmware component
JP5255285B2 (ja) プロセッサが規格合致するように見えるアーキテクチャ・レベルを選択するための方法および装置
US10296353B2 (en) Protecting basic input/output (BIOS) code
JP2006092544A (ja) プリオペレーティングシステム環境におけるモジュールの動的リンク
CN104375849A (zh) 加载内核的方法及装置
CN104267981A (zh) 一种加载桌面上的应用布局的方法及装置
CN112015522B (zh) 系统功能扩展方法、装置及计算机可读存储介质
CN105190552A (zh) 执行多个管理程序的系统和方法
CN109857432B (zh) 一种游戏应用的热更新方法和装置
JP2015503812A (ja) 並列化可能で信頼できるインストールのためのインストールエンジン及びパッケージフォーマット
EP3724757B1 (en) Firmware publication of multiple binary images
CN103530165B (zh) 一种应用于物联网行业的java解决方案
US11036569B2 (en) Stack safety for independently defined operations
CN106775608B (zh) 独立系统进程的实现方法和装置
US10552135B1 (en) Reducing a size of an application package
CN107943544B (zh) 一种内核补丁的加载方法及装置
JP2017111656A (ja) モジュール置換システム、方法及びプログラム
CN107911816B (zh) 用于多模IoT设备的启动方法、多模IoT设备及存储介质
CN116401003A (zh) 基于桌面操作系统的安卓应用运行方法、系统及存储介质
CN104281443B (zh) 利用tcm实现代码、数据替换的方法
CN105260224A (zh) 一种lua脚本扩展系统及其运行方法
CN110035322A (zh) 一种启动系统的方法、装置及计算机可读存储介质