目次
前回:ADB Helperをハックしてみた(adb-running-checker.js篇)に引き続き、 adb-helperをハックしていきたいと思います
フォルダ内のファイル構成
windows | mac | linux | |
---|---|---|---|
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での差異はありません。
モジュールは、今まで一番少ないかもしれませんね・・・・(^^;;;
コメントには、このように記載されています。
Workaround until bug 920586 is fixed
in order to allow TCPSocket usage in chrome code
without exposing it to content
【訳文】
bug920586までの回避策は修正されています。
クロムコードにおいてTCPSocketが危険にさらされずに
使用許可する仕様から変わる所まで。
・scopeオブジェクトにChromeのSandboxを定義します。
・scopeのDOMErrorにChromeのServices.jsmをDOMErrorを割り当てます。
・Services.scriptloaderを使って、TCPSocket.jsをロードし、
scopeオブジェクトに代入します。
・scopeオブジェクトを返します。
コメントには、このように記載されています。
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 しなければらない。
- initializeメソッド
TCPSocketをオープンします。
アドレスはローカルホスト,binaryType,ポート:5037 - _hexdumpメソッド
コメントには、このように記載されています。
Dump the first few bytes of the given array to the console.
【訳文】
配列の先頭数バイトをDumpする為にコンソールへ渡します。
・decoderを定義し、TextDecoder("windows-1252")でデコードします。 ・Uint8Array型の配列arrayを定義します。 ・配列arrayの長さを格納します ・配列arrayの長さ分の文字変換を行います。 ・コンソールへ出力します。 - 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で送信します
・同じ型の場合は、そのまま送信
- closeメソッド
・待機状態が"open"又は"connecting"は接続を切断します。
AdbSocketクラスをエクスポートします。
今回のまとめ
今回は、大分早く公開出来ました。
次回はbootstrap.jsファイルの中身をハックしていきたいと思います。
お時間のある方、宜しかったら見て下さい。m(__)m
グンマー@坊主五厘
追伸
何か間違いが有った場合は、ご指摘ください。
バックナンバー