新訳:ADB Helperをハックしてみた(adb-client.js)

この記事は『Firefox OS / B2G OS Advent Calendar 2016』 13日目の記事です。
Firefox OS で、使用されている「ADB Helper」を再度まとめ直してみました。

目次

 

前回、新訳:ADB Helperをハックしてみた(adb.js)に引き続き、
adb-helperをハックしていきたいと思います

  1. フォルダ内のファイル構成
  2. adb-client.js
  3. 予備知識
  4. モジュール構成
  5. 今回のまとめ
  6. 関連記事
  7. 今年のAdvent Calendar
フォルダ内のファイル構成

 

[ 解凍フォルダ内のjsファイル群 ]
windows
mac
linux

install.rdf

main.js

adb.js

adb-client.js

adb-running-checker.js

adb-socket.js

bootstrap.js

scanner.js

device.js
※1
※1
※1

devtools-import.js
※1
※1
※1

devtools-require.js
※1
※1
※1

fastboot.js
※1
※1
※1

subprocess.js
※2
※2
※2

subprocess_worker_win.js
※3
※3
※3

subprocess_worker_unix.js
※4
※4
※4

 
※1 : version 0.7.1 時点では無かったファイル
※2 : version 0.7.1 時点で有ったファイル
※3 : version 0.7.1 時点で有ったファイル、Windows用ファイル
※4 : version 0.7.1 時点で有ったファイル、mac,linux用ファイル

OS毎に使用されるファイルが有る事が確認できます。

adb-client.js

 
前回に引き続き、adb-client.js ファイルからハックしていきたいと思います。
 
ご覧の通り、各OSでの差異はありません。

2014.11.06 時点から、かなりバージョンアップしているのが分かります。

モジュールは下図の通りです

モジュール構成

 
上記予備知識をもとにハックしていきます!

関数名
処理概要

getBuffer() 関数
  • コメント
    buffer を返します。Gecko バージョンの差異がある時
  • buffer を返します。

unpackPacket() 関数
  • 関数:getBuffer() を用いて、変数:buffer を定義します。
  • buffer = 4バイトかつ aIgnoreResponse = falseの時、
    JSON データ { length: 0, data: “” } を返します。
  • 上記以外の時、以降の処理を実行します。
  • 変数:lengthView を Uint8Array で定義します。
  • 変数:decoder を TextDecoder で定義します。
  • 変数:length に decoder を parseInt して取得します。
  • 変数:text に buffer, length を用いて、Uint8Array で定義します。
  • JSON データ { length: length, data: decoder.decode(text) }; を返します。

checkResponse() 関数
  • コメント
    レスポンスをチェックします。デフォルトは、定数:OKAY
  • 関数:getBuffer() を用いて、変数:buffer を定義します。
  • 配列変数:view を buffer を用いて初期化、 Uint32Array で定義します。
  • 配列変数:view[0] = 定数:FAIL の場合、ログ出力します。
  • 配列変数:view[0] に 定数:OKAY をセットし、返します。

createRequest() 関数
  • 関数:getBuffer() を用いて、変数:buffer を定義します。
  • 引数:aCommand を 大文字変換し、変数:length へ格納します。
  • 変数:length の長さが 4 バイトになるまで、0 を付加します。
  • 変数:encoder を TextEncoder で定義します。
  • 変数:length に 引数:aCommand 付加します。
  • 上記変数をエンコードしたものを返します。

close() 関数
  • ソケットを close します。

client オブジェクト定義
  • getBuffer 関数定義
  • unpackPacket 関数定義
  • checkResponse 関数定義
  • createRequest 関数定義
  • connect 関数定義
  • close 関数定義

今回のまとめ

 
adb のクライアント側を制御する為のモジュールをハックしました。
上記モジュールが adb.js などで、exports されて使用できるようになります。

次回は、adb-running-checker.js をハックする予定です。

関連記事

今年のAdvent Calendar

去年のAdvent Calendar

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です