らいふうっどの閑話休題

興味のあることをゆる~く書いていく

ADB Helperをハックしてみた(adb-socket.js篇)

目次

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

  1. フォルダ内のファイル構成
  2. 予備知識
  3. adb-socket.js
  4. 今回のまとめ
  5. バックナンバー

フォルダ内のファイル構成
[解凍フォルダ内のjsファイル群]
windowsmaclinux
install.rdf
main.js
adb.js
adb-client.js
adb-running-checker.js
adb-socket.js
bootstrap.js
scanner.js
subprocess.js
subprocess_worker_unix.js
subprocess_worker_win.js

前回に引き続き、adb-running-checker.jsファイルをハックしていきたいと思います。

予備知識

サンドボックス (セキュリティ)
http://is.gd/P7iDNm
JavaScript コードモジュールの利用(jsm)
JavaScript コードモジュールは、Gecko 1.9 で導入されたコンセプトであり、
特権を持った異なるスコープ間でコードを共有するために用いられます。
また、モジュールは、グローバルな JavaScript のシングルトンオブジェクトを
生成するために用いることもできます(以前は JavaScript XPCOM オブジェクトを使う必要がありました)。
JavaScript コードモジュールは、登録されたパスに配置された純粋な JavaScript のコードです。
Components.utils.import() を使って、 XUL スクリプトJavaScript XPCOM スクリプトのような
特定のJavaScript のスコープへモジュールを読み込むことができます。
https://developer.mozilla.org/ja/docs/Mozilla/JavaScript_code_modules/Using

adb-socket.js

ご覧の通り、各OSでの差異はありません。
adb-socket
モジュールは、今まで一番少ないかもしれませんね・・・・(^^;;;
スクリーンショット 2015-01-05 20.48.41
コメントには、このように記載されています。
Workaround until bug 920586 is fixed in order to allow TCPSocket usage in chrome code without exposing it to content 【訳文】
bug920586までの回避策は修正されています。
クロムコードにおいてTCPSocketが危険にさらされずに
使用許可する仕様から変わる所まで。

function createTCPSocket()

 ・scopeオブジェクトにChromeのSandboxを定義します。
 ・scopeのDOMErrorにChromeのServices.jsmをDOMErrorを割り当てます。
 ・Services.scriptloaderを使って、TCPSocket.jsをロードし、
  scopeオブジェクトに代入します。
 ・scopeオブジェクトを返します。

TCPSocketを上記createTCPSocketで定義します。


コメントには、このように記載されています。

Creates a socket connected to the adb instance. This instantiation is sync, and returns before we know if opening the connection succeeds. Callers must attach handlers to the s field.
【訳文】
adb instanceへCreateしたsocketを接続します。
上記処理で同期し、私達が知る限り必ず成功します。
呼び出し元は必ず、このハンドラはattach しなければらない。

AdbSocketクラスを定義します。
  1. initializeメソッド  TCPSocketをオープンします。
     アドレスはローカルホスト,binaryType,ポート:5037
  2. _hexdumpメソッド  コメントには、このように記載されています。
       Dump the first few bytes of the given array to the console.  
     【訳文】
     配列の先頭数バイトをDumpする為にコンソールへ渡します。

     ・decoderを定義し、TextDecoder("windows-1252")でデコードします。  ・Uint8Array型の配列arrayを定義します。  ・配列arrayの長さを格納します  ・配列arrayの長さ分の文字変換を行います。  ・コンソールへ出力します。
  3. sendメソッド  コメントには、このように記載されています。
       Create a new Uint8Array in case the array we got is of a different type  (like Uint32Array), since the old API takes a Uint8Array.  
     【訳文】
     得た配列が違う型をなっているといけないから、新しいUint8Arrayを作成しなければいけない
     (Uint32Arrayのように)古いAPIがUint8Arrayを取得するので。 

     ・古いソケットAPIの場合、Uint8Arrayで送信します
     ・同じ型の場合は、そのまま送信
  4. closeメソッド  ・待機状態が"open"又は"connecting"は接続を切断します。

AdbSocketクラスをエクスポートします。

今回のまとめ

今回は、大分早く公開出来ました。
次回はbootstrap.jsファイルの中身をハックしていきたいと思います。
お時間のある方、宜しかったら見て下さい。m(__)m
グンマー@坊主五厘

追伸 何か間違いが有った場合は、ご指摘ください。

バックナンバー